Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'release/scripts')
m---------release/scripts/addons0
m---------release/scripts/addons_contrib0
-rw-r--r--release/scripts/freestyle/modules/freestyle/__init__.py12
-rw-r--r--release/scripts/freestyle/modules/freestyle/chainingiterators.py122
-rw-r--r--release/scripts/freestyle/modules/freestyle/predicates.py22
-rw-r--r--release/scripts/freestyle/modules/freestyle/types.py2
-rw-r--r--release/scripts/freestyle/modules/freestyle/utils.py9
-rw-r--r--release/scripts/freestyle/modules/parameter_editor.py53
-rw-r--r--release/scripts/freestyle/styles/anisotropic_diffusion.py6
-rw-r--r--release/scripts/freestyle/styles/apriori_and_causal_density.py6
-rw-r--r--release/scripts/freestyle/styles/apriori_density.py8
-rw-r--r--release/scripts/freestyle/styles/blueprint_circles.py8
-rw-r--r--release/scripts/freestyle/styles/blueprint_ellipses.py6
-rw-r--r--release/scripts/freestyle/styles/blueprint_squares.py6
-rw-r--r--release/scripts/freestyle/styles/cartoon.py6
-rw-r--r--release/scripts/freestyle/styles/contour.py8
-rw-r--r--release/scripts/freestyle/styles/curvature2d.py6
-rw-r--r--release/scripts/freestyle/styles/external_contour.py6
-rw-r--r--release/scripts/freestyle/styles/external_contour_sketchy.py6
-rw-r--r--release/scripts/freestyle/styles/external_contour_smooth.py10
-rw-r--r--release/scripts/freestyle/styles/haloing.py10
-rw-r--r--release/scripts/freestyle/styles/ignore_small_occlusions.py8
-rw-r--r--release/scripts/freestyle/styles/invisible_lines.py6
-rw-r--r--release/scripts/freestyle/styles/japanese_bigbrush.py20
-rw-r--r--release/scripts/freestyle/styles/long_anisotropically_dense.py25
-rw-r--r--release/scripts/freestyle/styles/multiple_parameterization.py12
-rw-r--r--release/scripts/freestyle/styles/nature.py6
-rw-r--r--release/scripts/freestyle/styles/near_lines.py6
-rw-r--r--release/scripts/freestyle/styles/occluded_by_specific_object.py12
-rw-r--r--release/scripts/freestyle/styles/polygonalize.py6
-rw-r--r--release/scripts/freestyle/styles/qi0.py6
-rw-r--r--release/scripts/freestyle/styles/qi0_not_external_contour.py6
-rw-r--r--release/scripts/freestyle/styles/qi1.py6
-rw-r--r--release/scripts/freestyle/styles/qi2.py6
-rw-r--r--release/scripts/freestyle/styles/sequentialsplit_sketchy.py8
-rw-r--r--release/scripts/freestyle/styles/sketchy_multiple_parameterization.py6
-rw-r--r--release/scripts/freestyle/styles/sketchy_topology_broken.py10
-rw-r--r--release/scripts/freestyle/styles/sketchy_topology_preserved.py6
-rw-r--r--release/scripts/freestyle/styles/split_at_tvertices.py10
-rw-r--r--release/scripts/freestyle/styles/suggestive.py6
-rw-r--r--release/scripts/freestyle/styles/thickness_fof_depth_discontinuity.py6
-rw-r--r--release/scripts/freestyle/styles/tipremover.py6
-rw-r--r--release/scripts/freestyle/styles/tvertex_remover.py6
-rw-r--r--release/scripts/freestyle/styles/uniformpruning_zsort.py6
-rw-r--r--release/scripts/modules/animsys_refactor.py5
-rw-r--r--release/scripts/modules/bl_i18n_utils/bl_extract_messages.py23
-rw-r--r--release/scripts/modules/bl_i18n_utils/settings.py1
-rw-r--r--release/scripts/modules/bl_i18n_utils/utils.py2
-rwxr-xr-xrelease/scripts/modules/bl_i18n_utils/utils_rtl.py22
-rw-r--r--release/scripts/modules/bl_i18n_utils/utils_spell_check.py7
-rw-r--r--release/scripts/modules/bl_keymap_utils/io.py25
-rw-r--r--release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py33
-rw-r--r--release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py1
-rw-r--r--release/scripts/modules/bl_keymap_utils/versioning.py49
-rw-r--r--release/scripts/modules/bl_previews_utils/bl_previews_render.py17
-rw-r--r--release/scripts/modules/bpy/__init__.py4
-rw-r--r--release/scripts/modules/bpy/ops.py170
-rw-r--r--release/scripts/modules/bpy/utils/__init__.py3
-rw-r--r--release/scripts/modules/bpy/utils/previews.py4
-rw-r--r--release/scripts/modules/bpy_extras/keyconfig_utils.py1
-rw-r--r--release/scripts/modules/bpy_extras/node_shader_utils.py64
-rw-r--r--release/scripts/modules/bpy_extras/object_utils.py3
-rw-r--r--release/scripts/modules/bpy_types.py30
-rw-r--r--release/scripts/modules/console/complete_calltip.py12
-rw-r--r--release/scripts/modules/console/intellisense.py2
-rw-r--r--release/scripts/modules/gpu_extras/presets.py7
-rw-r--r--release/scripts/modules/graphviz_export.py28
-rw-r--r--release/scripts/modules/rna_manual_reference.py172
-rw-r--r--release/scripts/modules/rna_prop_ui.py4
-rw-r--r--release/scripts/modules/sys_info.py4
-rw-r--r--release/scripts/presets/gpencil_material/fill_only.py1
-rw-r--r--release/scripts/presets/gpencil_material/stroke_and_fill.py1
-rw-r--r--release/scripts/presets/gpencil_material/stroke_only.py1
-rw-r--r--release/scripts/presets/interface_theme/blender_light.xml25
-rw-r--r--release/scripts/presets/keyconfig/blender.py8
-rw-r--r--release/scripts/presets/keyconfig/blender_27x.py3
-rw-r--r--release/scripts/presets/keyconfig/keymap_data/blender_default.py814
-rw-r--r--release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py371
-rw-r--r--release/scripts/startup/bl_app_templates_system/2D_Animation/__init__.py1
-rw-r--r--release/scripts/startup/bl_operators/__init__.py1
-rw-r--r--release/scripts/startup/bl_operators/anim.py19
-rw-r--r--release/scripts/startup/bl_operators/clip.py2
-rw-r--r--release/scripts/startup/bl_operators/console.py2
-rw-r--r--release/scripts/startup/bl_operators/file.py4
-rw-r--r--release/scripts/startup/bl_operators/gpencil_mesh_bake.py157
-rw-r--r--release/scripts/startup/bl_operators/image.py3
-rw-r--r--release/scripts/startup/bl_operators/object.py5
-rw-r--r--release/scripts/startup/bl_operators/object_align.py4
-rw-r--r--release/scripts/startup/bl_operators/object_quick_effects.py72
-rw-r--r--release/scripts/startup/bl_operators/object_randomize_transform.py2
-rw-r--r--release/scripts/startup/bl_operators/presets.py8
-rw-r--r--release/scripts/startup/bl_operators/sequencer.py8
-rw-r--r--release/scripts/startup/bl_operators/simulation.py2
-rw-r--r--release/scripts/startup/bl_operators/userpref.py11
-rw-r--r--release/scripts/startup/bl_operators/uvcalc_lightmap.py5
-rw-r--r--release/scripts/startup/bl_operators/vertexpaint_dirt.py2
-rw-r--r--release/scripts/startup/bl_operators/view3d.py14
-rw-r--r--release/scripts/startup/bl_operators/wm.py13
-rw-r--r--release/scripts/startup/bl_ui/properties_constraint.py33
-rw-r--r--release/scripts/startup/bl_ui/properties_data_camera.py1
-rw-r--r--release/scripts/startup/bl_ui/properties_data_curve.py65
-rw-r--r--release/scripts/startup/bl_ui/properties_data_empty.py35
-rw-r--r--release/scripts/startup/bl_ui/properties_data_gpencil.py4
-rw-r--r--release/scripts/startup/bl_ui/properties_data_hair.py13
-rw-r--r--release/scripts/startup/bl_ui/properties_data_mesh.py14
-rw-r--r--release/scripts/startup/bl_ui/properties_data_pointcloud.py13
-rw-r--r--release/scripts/startup/bl_ui/properties_data_volume.py41
-rw-r--r--release/scripts/startup/bl_ui/properties_freestyle.py14
-rw-r--r--release/scripts/startup/bl_ui/properties_grease_pencil_common.py36
-rw-r--r--release/scripts/startup/bl_ui/properties_mask_common.py2
-rw-r--r--release/scripts/startup/bl_ui/properties_material_gpencil.py11
-rw-r--r--release/scripts/startup/bl_ui/properties_object.py3
-rw-r--r--release/scripts/startup/bl_ui/properties_paint_common.py62
-rw-r--r--release/scripts/startup/bl_ui/properties_particle.py1
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_common.py5
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_field.py4
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_fluid.py189
-rw-r--r--release/scripts/startup/bl_ui/properties_render.py5
-rw-r--r--release/scripts/startup/bl_ui/properties_texture.py2
-rw-r--r--release/scripts/startup/bl_ui/properties_view_layer.py1
-rw-r--r--release/scripts/startup/bl_ui/space_clip.py40
-rw-r--r--release/scripts/startup/bl_ui/space_dopesheet.py27
-rw-r--r--release/scripts/startup/bl_ui/space_filebrowser.py5
-rw-r--r--release/scripts/startup/bl_ui/space_graph.py34
-rw-r--r--release/scripts/startup/bl_ui/space_image.py200
-rw-r--r--release/scripts/startup/bl_ui/space_nla.py8
-rw-r--r--release/scripts/startup/bl_ui/space_node.py13
-rw-r--r--release/scripts/startup/bl_ui/space_outliner.py4
-rw-r--r--release/scripts/startup/bl_ui/space_properties.py26
-rw-r--r--release/scripts/startup/bl_ui/space_sequencer.py122
-rw-r--r--release/scripts/startup/bl_ui/space_statusbar.py13
-rw-r--r--release/scripts/startup/bl_ui/space_text.py10
-rw-r--r--release/scripts/startup/bl_ui/space_time.py58
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_common.py29
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_toolbar.py116
-rw-r--r--release/scripts/startup/bl_ui/space_topbar.py2
-rw-r--r--release/scripts/startup/bl_ui/space_userpref.py71
-rw-r--r--release/scripts/startup/bl_ui/space_view3d.py235
-rw-r--r--release/scripts/startup/bl_ui/space_view3d_toolbar.py87
-rw-r--r--release/scripts/startup/keyingsets_builtins.py2
-rw-r--r--release/scripts/startup/nodeitems_builtins.py60
141 files changed, 2489 insertions, 1986 deletions
diff --git a/release/scripts/addons b/release/scripts/addons
-Subproject 49c39f59fbc464dd34388990123f271c39eacbf
+Subproject 35c23b4db494e58538a677c4fb0ec9ec1e8ffaa
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
-Subproject a52733b58d95ce60ecde95a9eca242e7319c285
+Subproject eae381b698248e70e4a3c62bdf239f9d5a0470a
diff --git a/release/scripts/freestyle/modules/freestyle/__init__.py b/release/scripts/freestyle/modules/freestyle/__init__.py
index 6f6b44224d8..c3375df5109 100644
--- a/release/scripts/freestyle/modules/freestyle/__init__.py
+++ b/release/scripts/freestyle/modules/freestyle/__init__.py
@@ -21,18 +21,6 @@ This module provides data types of view map components (0D and 1D
elements), base classes for defining line stylization rules
(predicates, functions, chaining iterators, and stroke shaders),
as well as helper functions for style module writing.
-
-Submodules:
-
-.. toctree::
- :maxdepth: 1
-
- freestyle.types.rst
- freestyle.predicates.rst
- freestyle.functions.rst
- freestyle.chainingiterators.rst
- freestyle.shaders.rst
- freestyle.utils.rst
"""
diff --git a/release/scripts/freestyle/modules/freestyle/chainingiterators.py b/release/scripts/freestyle/modules/freestyle/chainingiterators.py
index fc9de6475b2..be9a25d1a57 100644
--- a/release/scripts/freestyle/modules/freestyle/chainingiterators.py
+++ b/release/scripts/freestyle/modules/freestyle/chainingiterators.py
@@ -36,14 +36,14 @@ __all__ = (
"pyFillOcclusionsAbsoluteAndRelativeChainingIterator",
"pyFillQi0AbsoluteAndRelativeChainingIterator",
"pyNoIdChainSilhouetteIterator",
- )
+)
# module members
from _freestyle import (
ChainPredicateIterator,
ChainSilhouetteIterator,
- )
+)
# constructs for predicate definition in Python
from freestyle.types import (
@@ -51,15 +51,15 @@ from freestyle.types import (
ChainingIterator,
Nature,
TVertex,
- )
+)
from freestyle.predicates import (
ExternalContourUP1D,
- )
+)
from freestyle.utils import (
ContextFunctions as CF,
get_chain_length,
find_matching_vertex,
- )
+)
import bpy
@@ -73,7 +73,7 @@ NATURES = (
Nature.SUGGESTIVE_CONTOUR,
Nature.VALLEY,
Nature.RIDGE
- )
+)
def nature_in_preceding(nature, index):
@@ -88,6 +88,7 @@ class pyChainSilhouetteIterator(ChainingIterator):
silhouettes, then borders, then suggestive contours, then all other edge
types. A ViewEdge is only chained once.
"""
+
def __init__(self, stayInSelection=True):
ChainingIterator.__init__(self, stayInSelection, True, None, True)
@@ -96,12 +97,12 @@ class pyChainSilhouetteIterator(ChainingIterator):
def traverse(self, iter):
it = AdjacencyIterator(iter)
- ## case of TVertex
+ # case of TVertex
vertex = self.next_vertex
if type(vertex) is TVertex:
mate = vertex.get_mate(self.current_edge)
return find_matching_vertex(mate.id, it)
- ## case of NonTVertex
+ # case of NonTVertex
winner = None
for i, nat in enumerate(NATURES):
if (nat & self.current_edge.nature):
@@ -144,12 +145,12 @@ class pyChainSilhouetteGenericIterator(ChainingIterator):
def traverse(self, iter):
it = AdjacencyIterator(iter)
- ## case of TVertex
+ # case of TVertex
vertex = self.next_vertex
if type(vertex) is TVertex:
mate = vertex.get_mate(self.current_edge)
return find_matching_vertex(mate.id, it)
- ## case of NonTVertex
+ # case of NonTVertex
winner = None
for i, nat in enumerate(NATURES):
if (nat & self.current_edge.nature):
@@ -226,7 +227,7 @@ class pySketchyChainSilhouetteIterator(ChainingIterator):
:type stayInSelection: bool
"""
- def __init__(self, nRounds=3,stayInSelection=True):
+ def __init__(self, nRounds=3, stayInSelection=True):
ChainingIterator.__init__(self, stayInSelection, False, None, True)
self._timeStamp = CF.get_time_stamp() + nRounds
self._nRounds = nRounds
@@ -248,12 +249,12 @@ class pySketchyChainSilhouetteIterator(ChainingIterator):
def traverse(self, iter):
it = AdjacencyIterator(iter)
- ## case of TVertex
+ # case of TVertex
vertex = self.next_vertex
if type(vertex) is TVertex:
mate = vertex.get_mate(self.current_edge)
return self.make_sketchy(find_matching_vertex(mate.id, it))
- ## case of NonTVertex
+ # case of NonTVertex
winner = None
for i, nat in enumerate(NATURES):
if (nat & self.current_edge.nature):
@@ -279,6 +280,7 @@ class pySketchyChainingIterator(ChainingIterator):
ViewEdge several times in order to produce multiple strokes per
ViewEdge.
"""
+
def __init__(self, nRounds=3, stayInSelection=True):
ChainingIterator.__init__(self, stayInSelection, False, None, True)
self._timeStamp = CF.get_time_stamp() + nRounds
@@ -300,7 +302,7 @@ class pySketchyChainingIterator(ChainingIterator):
if not found:
# This is a fatal error condition: self.current_edge must be found
- # among the edges seen by the AdjacencyIterator [bug #35695].
+ # among the edges seen by the AdjacencyIterator [bug T35695].
if bpy.app.debug_freestyle:
print('pySketchyChainingIterator: current edge not found')
return None
@@ -340,13 +342,13 @@ class pyFillOcclusionsRelativeChainingIterator(ChainingIterator):
winner = None
winnerOrientation = False
it = AdjacencyIterator(iter)
- ## case of TVertex
+ # case of TVertex
vertex = self.next_vertex
if type(vertex) is TVertex:
mate = vertex.get_mate(self.current_edge)
winner = find_matching_vertex(mate.id, it)
winnerOrientation = not it.is_incoming if not it.is_end else False
- ## case of NonTVertex
+ # case of NonTVertex
else:
for nat in NATURES:
if (self.current_edge.nature & nat):
@@ -377,7 +379,8 @@ class pyFillOcclusionsRelativeChainingIterator(ChainingIterator):
while (not _cit.is_end) and _cit.object.time_stamp != self.timestamp:
connexl += _cit.object.length_2d
_cit.increment()
- if _cit.is_begin: break
+ if _cit.is_begin:
+ break
if connexl > self._percent * self._length:
return None
@@ -396,6 +399,7 @@ class pyFillOcclusionsAbsoluteChainingIterator(ChainingIterator):
:arg length: The maximum length of the occluded part in pixels.
:type length: int
"""
+
def __init__(self, length):
ChainingIterator.__init__(self, False, True, None, True)
self._length = float(length)
@@ -408,13 +412,13 @@ class pyFillOcclusionsAbsoluteChainingIterator(ChainingIterator):
winner = None
winnerOrientation = False
it = AdjacencyIterator(iter)
- ## case of TVertex
+ # case of TVertex
vertex = self.next_vertex
if type(vertex) is TVertex:
mate = vertex.get_mate(self.current_edge)
winner = find_matching_vertex(mate.id, it)
winnerOrientation = not it.is_incoming if not it.is_end else False
- ## case of NonTVertex
+ # case of NonTVertex
else:
for nat in NATURES:
if (self.current_edge.nature & nat):
@@ -437,7 +441,8 @@ class pyFillOcclusionsAbsoluteChainingIterator(ChainingIterator):
while (not _cit.is_end) and _cit.object.time_stamp != self.timestamp:
connexl += _cit.object.length_2d
_cit.increment()
- if _cit.is_begin: break
+ if _cit.is_begin:
+ break
if connexl > self._length:
return None
@@ -460,6 +465,7 @@ class pyFillOcclusionsAbsoluteAndRelativeChainingIterator(ChainingIterator):
:arg l: Absolute length.
:type l: float
"""
+
def __init__(self, percent, l):
ChainingIterator.__init__(self, False, True, None, True)
self._length = 0.0
@@ -476,13 +482,13 @@ class pyFillOcclusionsAbsoluteAndRelativeChainingIterator(ChainingIterator):
winner = None
winnerOrientation = False
it = AdjacencyIterator(iter)
- ## case of TVertex
+ # case of TVertex
vertex = self.next_vertex
if type(vertex) is TVertex:
mate = vertex.get_mate(self.current_edge)
winner = find_matching_vertex(mate.id, it)
winnerOrientation = not it.is_incoming if not it.is_end else False
- ## case of NonTVertex
+ # case of NonTVertex
else:
for nat in NATURES:
if (self.current_edge.nature & nat):
@@ -496,22 +502,23 @@ class pyFillOcclusionsAbsoluteAndRelativeChainingIterator(ChainingIterator):
if winner is not None and winner.time_stamp != CF.get_time_stamp():
- if self._length == 0.0:
- self._length = get_chain_length(winner, winnerOrientation)
-
- connexl = 0.0
- _cit = pyChainSilhouetteGenericIterator(False, False)
- _cit.begin = winner
- _cit.current_edge = winner
- _cit.orientation = winnerOrientation
- _cit.init()
- while (not _cit.is_end) and _cit.object.time_stamp != CF.get_time_stamp():
- connexl += _cit.object.length_2d
- _cit.increment()
- if _cit.is_begin: break
-
- if (connexl > self._percent * self._length) or (connexl > self._absLength):
- return None
+ if self._length == 0.0:
+ self._length = get_chain_length(winner, winnerOrientation)
+
+ connexl = 0.0
+ _cit = pyChainSilhouetteGenericIterator(False, False)
+ _cit.begin = winner
+ _cit.current_edge = winner
+ _cit.orientation = winnerOrientation
+ _cit.init()
+ while (not _cit.is_end) and _cit.object.time_stamp != CF.get_time_stamp():
+ connexl += _cit.object.length_2d
+ _cit.increment()
+ if _cit.is_begin:
+ break
+
+ if (connexl > self._percent * self._length) or (connexl > self._absLength):
+ return None
return winner
@@ -530,6 +537,7 @@ class pyFillQi0AbsoluteAndRelativeChainingIterator(ChainingIterator):
:arg l: Absolute length.
:type l: float
"""
+
def __init__(self, percent, l):
ChainingIterator.__init__(self, False, True, None, True)
self._length = 0.0
@@ -545,13 +553,13 @@ class pyFillQi0AbsoluteAndRelativeChainingIterator(ChainingIterator):
winner = None
winnerOrientation = False
it = AdjacencyIterator(iter)
- ## case of TVertex
+ # case of TVertex
vertex = self.next_vertex
if type(vertex) is TVertex:
mate = vertex.get_mate(self.current_edge)
winner = find_matching_vertex(mate.id, it)
winnerOrientation = not it.is_incoming if not it.is_end else False
- ## case of NonTVertex
+ # case of NonTVertex
else:
for nat in NATURES:
if (self.current_edge.nature & nat):
@@ -565,22 +573,22 @@ class pyFillQi0AbsoluteAndRelativeChainingIterator(ChainingIterator):
if winner is not None and winner.qi:
+ if self._length == 0.0:
+ self._length = get_chain_length(winner, winnerOrientation)
- if self._length == 0.0:
- self._length = get_chain_length(winner, winnerOrientation)
-
- connexl = 0
- _cit = pyChainSilhouetteGenericIterator(False, False)
- _cit.begin = winner
- _cit.current_edge = winner
- _cit.orientation = winnerOrientation
- _cit.init()
- while (not _cit.is_end) and _cit.object.qi != 0:
- connexl += _cit.object.length_2d
- _cit.increment()
- if _cit.is_begin: break
- if (connexl > self._percent * self._length) or (connexl > self._absLength):
- return None
+ connexl = 0
+ _cit = pyChainSilhouetteGenericIterator(False, False)
+ _cit.begin = winner
+ _cit.current_edge = winner
+ _cit.orientation = winnerOrientation
+ _cit.init()
+ while (not _cit.is_end) and _cit.object.qi != 0:
+ connexl += _cit.object.length_2d
+ _cit.increment()
+ if _cit.is_begin:
+ break
+ if (connexl > self._percent * self._length) or (connexl > self._absLength):
+ return None
return winner
@@ -633,10 +641,10 @@ class pyNoIdChainSilhouetteIterator(ChainingIterator):
if vA.id.first == vB.id.first:
return ve
return None
- ## case of NonTVertex
+ # case of NonTVertex
else:
for i, nat in enumerate(NATURES):
- if (nat & self.current_edge.nature):
+ if (nat & self.current_edge.nature):
for ve in it:
ve_nat = ve.nature
if (ve_nat & nat):
diff --git a/release/scripts/freestyle/modules/freestyle/predicates.py b/release/scripts/freestyle/modules/freestyle/predicates.py
index 5cbe577b956..656b6952591 100644
--- a/release/scripts/freestyle/modules/freestyle/predicates.py
+++ b/release/scripts/freestyle/modules/freestyle/predicates.py
@@ -95,7 +95,7 @@ __all__ = (
"pyZBP1D",
"pyZDiscontinuityBP1D",
"pyZSmallerUP1D",
- )
+)
# module members
@@ -117,7 +117,7 @@ from _freestyle import (
TrueUP1D,
ViewMapGradientNormBP1D,
WithinImageBoundaryUP1D,
- )
+)
# constructs for predicate definition in Python
from freestyle.types import (
@@ -129,7 +129,7 @@ from freestyle.types import (
TVertex,
UnaryPredicate0D,
UnaryPredicate1D,
- )
+)
from freestyle.functions import (
Curvature2DAngleF0D,
CurveNatureF1D,
@@ -149,7 +149,7 @@ from freestyle.functions import (
pyCurvilinearLengthF0D,
pyDensityAnisotropyF1D,
pyViewMapGradientNormF1D,
- )
+)
from freestyle.utils import material_from_fedge
@@ -194,6 +194,7 @@ class pyBackTVertexUP0D(UnaryPredicate0D):
Check whether an Interface0DIterator references a TVertex and is
the one that is hidden (inferred from the context).
"""
+
def __init__(self):
UnaryPredicate0D.__init__(self)
self._getQI = QuantitativeInvisibilityF0D()
@@ -239,7 +240,7 @@ class AndUP1D(UnaryPredicate1D):
correct_types = all(isinstance(p, UnaryPredicate1D) for p in self.predicates)
if not (correct_types and predicates):
raise TypeError("%s: Expected one or more UnaryPredicate1D, got %r" %
- (self.__class__.__name__, self.predicates))
+ (self.__class__.__name__, self.predicates))
def __call__(self, inter):
return all(pred(inter) for pred in self.predicates)
@@ -252,7 +253,7 @@ class OrUP1D(UnaryPredicate1D):
correct_types = all(isinstance(p, UnaryPredicate1D) for p in self.predicates)
if not (correct_types and predicates):
raise TypeError("%s: Expected one or more UnaryPredicate1D, got %r" %
- (self.__class__.__name__, self.predicates))
+ (self.__class__.__name__, self.predicates))
def __call__(self, inter):
return any(pred(inter) for pred in self.predicates)
@@ -533,7 +534,8 @@ class pyHighViewMapGradientNormUP1D(UnaryPredicate1D):
class pyDensityVariableSigmaUP1D(UnaryPredicate1D):
- def __init__(self, functor, sigmaMin, sigmaMax, lmin, lmax, tmin, tmax, integration=IntegrationType.MEAN, sampling=2.0):
+ def __init__(self, functor, sigmaMin, sigmaMax, lmin, lmax, tmin,
+ tmax, integration=IntegrationType.MEAN, sampling=2.0):
UnaryPredicate1D.__init__(self)
self._functor = functor
self._sigmaMin = float(sigmaMin)
@@ -571,7 +573,7 @@ class AndBP1D(BinaryPredicate1D):
correct_types = all(isinstance(p, BinaryPredicate1D) for p in self.predicates)
if not (correct_types and predicates):
raise TypeError("%s: Expected one or more BinaryPredicate1D, got %r" %
- (self.__class__.__name__, self.predicates))
+ (self.__class__.__name__, self.predicates))
def __call__(self, i1, i2):
return all(pred(i1, i2) for pred in self.predicates)
@@ -584,7 +586,7 @@ class OrBP1D(BinaryPredicate1D):
correct_types = all(isinstance(p, BinaryPredicate1D) for p in self.predicates)
if not (correct_types and predicates):
raise TypeError("%s: Expected one or more BinaryPredicate1D, got %r" %
- (self.__class__.__name__, self.predicates))
+ (self.__class__.__name__, self.predicates))
def __call__(self, i1, i2):
return any(pred(i1, i2) for pred in self.predicates)
@@ -672,8 +674,10 @@ class pyShuffleBP1D(BinaryPredicate1D):
def __call__(self, inter1, inter2):
return (random.uniform(0, 1) < random.uniform(0, 1))
+
class MaterialBP1D(BinaryPredicate1D):
"""Checks whether the two supplied ViewEdges have the same material."""
+
def __call__(self, i1, i2):
fedges = (fe for ve in (i1, i2) for fe in (ve.first_fedge, ve.last_fedge))
materials = {material_from_fedge(fe) for fe in fedges}
diff --git a/release/scripts/freestyle/modules/freestyle/types.py b/release/scripts/freestyle/modules/freestyle/types.py
index 22f80f41dfc..72d263b26a3 100644
--- a/release/scripts/freestyle/modules/freestyle/types.py
+++ b/release/scripts/freestyle/modules/freestyle/types.py
@@ -170,4 +170,4 @@ from _freestyle import (
ViewShape,
ViewVertex,
orientedViewEdgeIterator,
- )
+)
diff --git a/release/scripts/freestyle/modules/freestyle/utils.py b/release/scripts/freestyle/modules/freestyle/utils.py
index 2d47995d474..d129de66221 100644
--- a/release/scripts/freestyle/modules/freestyle/utils.py
+++ b/release/scripts/freestyle/modules/freestyle/utils.py
@@ -51,14 +51,14 @@ __all__ = (
"stroke_normal",
"StrokeCollector",
"tripplewise",
- )
+)
# module members
from _freestyle import (
ContextFunctions,
getCurrentScene,
integrate,
- )
+)
# constructs for helper functions in Python
from freestyle.types import (
@@ -66,7 +66,7 @@ from freestyle.types import (
Stroke,
StrokeShader,
StrokeVertexIterator,
- )
+)
from mathutils import Vector
from functools import lru_cache, namedtuple
@@ -288,7 +288,7 @@ class BoundingBox:
"maximum",
"size",
"corners",
- )
+ )
def __init__(self, minimum: Vector, maximum: Vector):
self.minimum = minimum
@@ -319,6 +319,7 @@ class BoundingBox:
class StrokeCollector(StrokeShader):
"""Collects and Stores stroke objects"""
+
def __init__(self):
StrokeShader.__init__(self)
self.strokes = []
diff --git a/release/scripts/freestyle/modules/parameter_editor.py b/release/scripts/freestyle/modules/parameter_editor.py
index 534ee7d65be..65eee93c871 100644
--- a/release/scripts/freestyle/modules/parameter_editor.py
+++ b/release/scripts/freestyle/modules/parameter_editor.py
@@ -34,20 +34,20 @@ from freestyle.types import (
TVertex,
Material,
ViewEdge,
- )
+)
from freestyle.chainingiterators import (
ChainPredicateIterator,
ChainSilhouetteIterator,
pySketchyChainSilhouetteIterator,
pySketchyChainingIterator,
- )
+)
from freestyle.functions import (
Curvature2DAngleF0D,
Normal2DF0D,
QuantitativeInvisibilityF1D,
VertexOrientation2DF0D,
CurveMaterialF0D,
- )
+)
from freestyle.predicates import (
AndUP1D,
ContourUP1D,
@@ -67,7 +67,7 @@ from freestyle.predicates import (
pyProjectedXBP1D,
pyProjectedYBP1D,
pyZBP1D,
- )
+)
from freestyle.shaders import (
BackboneStretcherShader,
BezierCurveShader,
@@ -86,7 +86,7 @@ from freestyle.shaders import (
StrokeTextureStepShader,
ThicknessNoiseShader as thickness_noise,
TipRemoverShader,
- )
+)
from freestyle.utils import (
angle_x_normal,
bound,
@@ -103,12 +103,12 @@ from freestyle.utils import (
pairwise,
simplify,
stroke_normal,
- )
+)
from _freestyle import (
blendRamp,
evaluateColorRamp,
evaluateCurveMappingF,
- )
+)
import time
import bpy
@@ -128,6 +128,7 @@ callbacks_lineset_post = []
class ColorRampModifier(StrokeShader):
"""Primitive for the color modifiers."""
+
def __init__(self, blend, influence, ramp):
StrokeShader.__init__(self)
self.blend = blend
@@ -144,6 +145,7 @@ class ColorRampModifier(StrokeShader):
class ScalarBlendModifier(StrokeShader):
"""Primitive for alpha and thickness modifiers."""
+
def __init__(self, blend_type, influence):
StrokeShader.__init__(self)
self.blend_type = blend_type
@@ -304,6 +306,7 @@ class BaseThicknessShader(StrokeShader, ThicknessModifierMixIn):
class ColorAlongStrokeShader(ColorRampModifier):
"""Maps a ramp to the color of the stroke, using the curvilinear abscissa (t)."""
+
def shade(self, stroke):
for svert, t in zip(stroke, iter_t2d_along_stroke(stroke)):
a = svert.attribute.color
@@ -313,6 +316,7 @@ class ColorAlongStrokeShader(ColorRampModifier):
class AlphaAlongStrokeShader(CurveMappingModifier):
"""Maps a curve to the alpha/transparency of the stroke, using the curvilinear abscissa (t)."""
+
def shade(self, stroke):
for svert, t in zip(stroke, iter_t2d_along_stroke(stroke)):
a = svert.attribute.alpha
@@ -322,6 +326,7 @@ class AlphaAlongStrokeShader(CurveMappingModifier):
class ThicknessAlongStrokeShader(ThicknessBlenderMixIn, CurveMappingModifier):
"""Maps a curve to the thickness of the stroke, using the curvilinear abscissa (t)."""
+
def __init__(self, thickness_position, thickness_ratio,
blend, influence, mapping, invert, curve, value_min, value_max):
ThicknessBlenderMixIn.__init__(self, thickness_position, thickness_ratio)
@@ -338,6 +343,7 @@ class ThicknessAlongStrokeShader(ThicknessBlenderMixIn, CurveMappingModifier):
class ColorDistanceFromCameraShader(ColorRampModifier):
"""Picks a color value from a ramp based on the vertex' distance from the camera."""
+
def __init__(self, blend, influence, ramp, range_min, range_max):
ColorRampModifier.__init__(self, blend, influence, ramp)
self.range = BoundedProperty(range_min, range_max)
@@ -352,6 +358,7 @@ class ColorDistanceFromCameraShader(ColorRampModifier):
class AlphaDistanceFromCameraShader(CurveMappingModifier):
"""Picks an alpha value from a curve based on the vertex' distance from the camera"""
+
def __init__(self, blend, influence, mapping, invert, curve, range_min, range_max):
CurveMappingModifier.__init__(self, blend, influence, mapping, invert, curve)
self.range = BoundedProperty(range_min, range_max)
@@ -366,6 +373,7 @@ class AlphaDistanceFromCameraShader(CurveMappingModifier):
class ThicknessDistanceFromCameraShader(ThicknessBlenderMixIn, CurveMappingModifier):
"""Picks a thickness value from a curve based on the vertex' distance from the camera."""
+
def __init__(self, thickness_position, thickness_ratio,
blend, influence, mapping, invert, curve, range_min, range_max, value_min, value_max):
ThicknessBlenderMixIn.__init__(self, thickness_position, thickness_ratio)
@@ -383,6 +391,7 @@ class ThicknessDistanceFromCameraShader(ThicknessBlenderMixIn, CurveMappingModif
class ColorDistanceFromObjectShader(ColorRampModifier):
"""Picks a color value from a ramp based on the vertex' distance from a given object."""
+
def __init__(self, blend, influence, ramp, target, range_min, range_max):
ColorRampModifier.__init__(self, blend, influence, ramp)
if target is None:
@@ -403,6 +412,7 @@ class ColorDistanceFromObjectShader(ColorRampModifier):
class AlphaDistanceFromObjectShader(CurveMappingModifier):
"""Picks an alpha value from a curve based on the vertex' distance from a given object."""
+
def __init__(self, blend, influence, mapping, invert, curve, target, range_min, range_max):
CurveMappingModifier.__init__(self, blend, influence, mapping, invert, curve)
if target is None:
@@ -423,6 +433,7 @@ class AlphaDistanceFromObjectShader(CurveMappingModifier):
class ThicknessDistanceFromObjectShader(ThicknessBlenderMixIn, CurveMappingModifier):
"""Picks a thickness value from a curve based on the vertex' distance from a given object."""
+
def __init__(self, thickness_position, thickness_ratio,
blend, influence, mapping, invert, curve, target, range_min, range_max, value_min, value_max):
ThicknessBlenderMixIn.__init__(self, thickness_position, thickness_ratio)
@@ -446,6 +457,7 @@ class ThicknessDistanceFromObjectShader(ThicknessBlenderMixIn, CurveMappingModif
# Material modifiers
class ColorMaterialShader(ColorRampModifier):
"""Assigns a color to the vertices based on their underlying material."""
+
def __init__(self, blend, influence, ramp, material_attribute, use_ramp):
ColorRampModifier.__init__(self, blend, influence, ramp)
self.attribute = material_attribute
@@ -474,6 +486,7 @@ class ColorMaterialShader(ColorRampModifier):
class AlphaMaterialShader(CurveMappingModifier):
"""Assigns an alpha value to the vertices based on their underlying material."""
+
def __init__(self, blend, influence, mapping, invert, curve, material_attribute):
CurveMappingModifier.__init__(self, blend, influence, mapping, invert, curve)
self.attribute = material_attribute
@@ -488,6 +501,7 @@ class AlphaMaterialShader(CurveMappingModifier):
class ThicknessMaterialShader(ThicknessBlenderMixIn, CurveMappingModifier):
"""Assigns a thickness value to the vertices based on their underlying material."""
+
def __init__(self, thickness_position, thickness_ratio,
blend, influence, mapping, invert, curve, material_attribute, value_min, value_max):
ThicknessBlenderMixIn.__init__(self, thickness_position, thickness_ratio)
@@ -506,6 +520,7 @@ class ThicknessMaterialShader(ThicknessBlenderMixIn, CurveMappingModifier):
class CalligraphicThicknessShader(ThicknessBlenderMixIn, ScalarBlendModifier):
"""Thickness modifier for achieving a calligraphy-like effect."""
+
def __init__(self, thickness_position, thickness_ratio,
blend_type, influence, orientation, thickness_min, thickness_max):
ThicknessBlenderMixIn.__init__(self, thickness_position, thickness_ratio)
@@ -531,6 +546,7 @@ class CalligraphicThicknessShader(ThicknessBlenderMixIn, ScalarBlendModifier):
class TangentColorShader(ColorRampModifier):
"""Color based on the direction of the stroke"""
+
def shade(self, stroke):
it = Interface0DIterator(stroke)
for svert in it:
@@ -542,6 +558,7 @@ class TangentColorShader(ColorRampModifier):
class TangentAlphaShader(CurveMappingModifier):
"""Alpha transparency based on the direction of the stroke"""
+
def shade(self, stroke):
it = Interface0DIterator(stroke)
for svert in it:
@@ -553,6 +570,7 @@ class TangentAlphaShader(CurveMappingModifier):
class TangentThicknessShader(ThicknessBlenderMixIn, CurveMappingModifier):
"""Thickness based on the direction of the stroke"""
+
def __init__(self, thickness_position, thickness_ratio, blend, influence, mapping, invert, curve,
thickness_min, thickness_max):
ThicknessBlenderMixIn.__init__(self, thickness_position, thickness_ratio)
@@ -571,6 +589,7 @@ class TangentThicknessShader(ThicknessBlenderMixIn, CurveMappingModifier):
class NoiseShader:
"""Base class for noise shaders"""
+
def __init__(self, amplitude, period, seed=512):
self.amplitude = amplitude
self.scale = 1 / period / seed
@@ -589,7 +608,9 @@ class NoiseShader:
class ThicknessNoiseShader(ThicknessBlenderMixIn, ScalarBlendModifier, NoiseShader):
"""Thickness based on pseudo-noise"""
- def __init__(self, thickness_position, thickness_ratio, blend_type, influence, amplitude, period, seed=512, asymmetric=True):
+
+ def __init__(self, thickness_position, thickness_ratio, blend_type,
+ influence, amplitude, period, seed=512, asymmetric=True):
ScalarBlendModifier.__init__(self, blend_type, influence)
ThicknessBlenderMixIn.__init__(self, thickness_position, thickness_ratio)
NoiseShader.__init__(self, amplitude, period, seed)
@@ -605,6 +626,7 @@ class ThicknessNoiseShader(ThicknessBlenderMixIn, ScalarBlendModifier, NoiseShad
class ColorNoiseShader(ColorRampModifier, NoiseShader):
"""Color based on pseudo-noise"""
+
def __init__(self, blend, influence, ramp, amplitude, period, seed=512):
ColorRampModifier.__init__(self, blend, influence, ramp)
NoiseShader.__init__(self, amplitude, period, seed)
@@ -617,6 +639,7 @@ class ColorNoiseShader(ColorRampModifier, NoiseShader):
class AlphaNoiseShader(CurveMappingModifier, NoiseShader):
"""Alpha transparency on based pseudo-noise"""
+
def __init__(self, blend, influence, mapping, invert, curve, amplitude, period, seed=512):
CurveMappingModifier.__init__(self, blend, influence, mapping, invert, curve)
NoiseShader.__init__(self, amplitude, period, seed)
@@ -641,6 +664,7 @@ def crease_angle(svert):
class CreaseAngleColorShader(ColorRampModifier):
"""Color based on the crease angle between two adjacent faces on the underlying geometry"""
+
def __init__(self, blend, influence, ramp, angle_min, angle_max):
ColorRampModifier.__init__(self, blend, influence, ramp)
# angles are (already) in radians
@@ -657,6 +681,7 @@ class CreaseAngleColorShader(ColorRampModifier):
class CreaseAngleAlphaShader(CurveMappingModifier):
"""Alpha transparency based on the crease angle between two adjacent faces on the underlying geometry"""
+
def __init__(self, blend, influence, mapping, invert, curve, angle_min, angle_max):
CurveMappingModifier.__init__(self, blend, influence, mapping, invert, curve)
# angles are (already) in radians
@@ -673,6 +698,7 @@ class CreaseAngleAlphaShader(CurveMappingModifier):
class CreaseAngleThicknessShader(ThicknessBlenderMixIn, CurveMappingModifier):
"""Thickness based on the crease angle between two adjacent faces on the underlying geometry"""
+
def __init__(self, thickness_position, thickness_ratio, blend, influence, mapping, invert, curve,
angle_min, angle_max, thickness_min, thickness_max):
ThicknessBlenderMixIn.__init__(self, thickness_position, thickness_ratio)
@@ -709,6 +735,7 @@ def normalized_absolute_curvature(svert, bounded_curvature):
class Curvature3DColorShader(ColorRampModifier):
"""Color based on the 3D curvature of the underlying geometry"""
+
def __init__(self, blend, influence, ramp, curvature_min, curvature_max):
ColorRampModifier.__init__(self, blend, influence, ramp)
self.curvature = BoundedProperty(curvature_min, curvature_max)
@@ -723,6 +750,7 @@ class Curvature3DColorShader(ColorRampModifier):
class Curvature3DAlphaShader(CurveMappingModifier):
"""Alpha based on the 3D curvature of the underlying geometry"""
+
def __init__(self, blend, influence, mapping, invert, curve, curvature_min, curvature_max):
CurveMappingModifier.__init__(self, blend, influence, mapping, invert, curve)
self.curvature = BoundedProperty(curvature_min, curvature_max)
@@ -737,6 +765,7 @@ class Curvature3DAlphaShader(CurveMappingModifier):
class Curvature3DThicknessShader(ThicknessBlenderMixIn, CurveMappingModifier):
"""Alpha based on the 3D curvature of the underlying geometry"""
+
def __init__(self, thickness_position, thickness_ratio, blend, influence, mapping, invert, curve,
curvature_min, curvature_max, thickness_min, thickness_max):
ThicknessBlenderMixIn.__init__(self, thickness_position, thickness_ratio)
@@ -744,7 +773,6 @@ class Curvature3DThicknessShader(ThicknessBlenderMixIn, CurveMappingModifier):
self.curvature = BoundedProperty(curvature_min, curvature_max)
self.thickness = BoundedProperty(thickness_min, thickness_max)
-
def shade(self, stroke):
for svert in stroke:
t = normalized_absolute_curvature(svert, self.curvature)
@@ -756,6 +784,7 @@ class Curvature3DThicknessShader(ThicknessBlenderMixIn, CurveMappingModifier):
class SimplificationShader(StrokeShader):
"""Simplifies a stroke by merging points together"""
+
def __init__(self, tolerance):
StrokeShader.__init__(self)
self.tolerance = tolerance
@@ -774,6 +803,7 @@ class SimplificationShader(StrokeShader):
class SinusDisplacementShader(StrokeShader):
"""Displaces the stroke in a sine wave-like shape."""
+
def __init__(self, wavelength, amplitude, phase):
StrokeShader.__init__(self)
self.wavelength = wavelength
@@ -797,6 +827,7 @@ class PerlinNoise1DShader(StrokeShader):
that lines with the same length and sampling interval will be
identically distorded.
"""
+
def __init__(self, freq=10, amp=10, oct=4, angle=radians(45), seed=-1):
StrokeShader.__init__(self)
self.noise = Noise(seed)
@@ -821,6 +852,7 @@ class PerlinNoise2DShader(StrokeShader):
More information on the noise shaders can be found at:
freestyleintegration.wordpress.com/2011/09/25/development-updates-on-september-25/
"""
+
def __init__(self, freq=10, amp=10, oct=4, angle=radians(45), seed=-1):
StrokeShader.__init__(self)
self.noise = Noise(seed)
@@ -839,6 +871,7 @@ class PerlinNoise2DShader(StrokeShader):
class Offset2DShader(StrokeShader):
"""Offsets the stroke by a given amount."""
+
def __init__(self, start, end, x, y):
StrokeShader.__init__(self)
self.start = start
@@ -856,6 +889,7 @@ class Offset2DShader(StrokeShader):
class Transform2DShader(StrokeShader):
"""Transforms the stroke (scale, rotation, location) around a given pivot point """
+
def __init__(self, pivot, scale_x, scale_y, angle, pivot_u, pivot_x, pivot_y):
StrokeShader.__init__(self)
self.pivot = pivot
@@ -1168,6 +1202,7 @@ class Seed:
return self.t
return seed
+
_seed = Seed()
diff --git a/release/scripts/freestyle/styles/anisotropic_diffusion.py b/release/scripts/freestyle/styles/anisotropic_diffusion.py
index fc136b23d82..48de802ba1b 100644
--- a/release/scripts/freestyle/styles/anisotropic_diffusion.py
+++ b/release/scripts/freestyle/styles/anisotropic_diffusion.py
@@ -29,13 +29,13 @@ from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
TrueBP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantThicknessShader,
IncreasingColorShader,
SamplingShader,
pyDiffusion2Shader,
- )
+)
from freestyle.types import Operators, Stroke
@@ -52,5 +52,5 @@ shaders_list = [
SamplingShader(2),
pyDiffusion2Shader(offset, nbIter),
IncreasingColorShader(1, 0, 0, 1, 0, 1, 0, 1),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/apriori_and_causal_density.py b/release/scripts/freestyle/styles/apriori_and_causal_density.py
index 42fc3370488..d19a1cda0bc 100644
--- a/release/scripts/freestyle/styles/apriori_and_causal_density.py
+++ b/release/scripts/freestyle/styles/apriori_and_causal_density.py
@@ -31,11 +31,11 @@ from freestyle.predicates import (
TrueBP1D,
pyDensityUP1D,
pyHighViewMapDensityUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
- )
+)
from freestyle.types import IntegrationType, Operators
upred = AndUP1D(QuantitativeInvisibilityUP1D(0), pyHighViewMapDensityUP1D(0.3, IntegrationType.LAST))
@@ -45,5 +45,5 @@ Operators.bidirectional_chain(ChainPredicateIterator(upred, bpred), NotUP1D(Quan
shaders_list = [
ConstantThicknessShader(2),
ConstantColorShader(0, 0, 0, 1),
- ]
+]
Operators.create(pyDensityUP1D(1, 0.1, IntegrationType.MEAN), shaders_list)
diff --git a/release/scripts/freestyle/styles/apriori_density.py b/release/scripts/freestyle/styles/apriori_density.py
index ad5e610e422..833f04d487c 100644
--- a/release/scripts/freestyle/styles/apriori_density.py
+++ b/release/scripts/freestyle/styles/apriori_density.py
@@ -29,17 +29,17 @@ from freestyle.predicates import (
TrueBP1D,
TrueUP1D,
pyHighViewMapDensityUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
- )
+)
from freestyle.types import Operators
-Operators.select(AndUP1D(QuantitativeInvisibilityUP1D(0), pyHighViewMapDensityUP1D(0.1,5)))
+Operators.select(AndUP1D(QuantitativeInvisibilityUP1D(0), pyHighViewMapDensityUP1D(0.1, 5)))
bpred = TrueBP1D()
-upred = AndUP1D(QuantitativeInvisibilityUP1D(0), pyHighViewMapDensityUP1D(0.0007,5))
+upred = AndUP1D(QuantitativeInvisibilityUP1D(0), pyHighViewMapDensityUP1D(0.0007, 5))
Operators.bidirectional_chain(ChainPredicateIterator(upred, bpred), NotUP1D(QuantitativeInvisibilityUP1D(0)))
shaders_list = [
ConstantThicknessShader(2),
diff --git a/release/scripts/freestyle/styles/blueprint_circles.py b/release/scripts/freestyle/styles/blueprint_circles.py
index f39cda5cff9..891d1b90c28 100644
--- a/release/scripts/freestyle/styles/blueprint_circles.py
+++ b/release/scripts/freestyle/styles/blueprint_circles.py
@@ -30,25 +30,25 @@ from freestyle.predicates import (
SameShapeIdBP1D,
TrueUP1D,
pyHigherLengthUP1D,
- )
+)
from freestyle.shaders import (
ConstantThicknessShader,
IncreasingColorShader,
pyBluePrintCirclesShader,
pyPerlinNoise1DShader,
- )
+)
from freestyle.types import Operators
upred = AndUP1D(QuantitativeInvisibilityUP1D(0), ContourUP1D())
bpred = SameShapeIdBP1D()
Operators.select(upred)
-Operators.bidirectional_chain(ChainPredicateIterator(upred,bpred), NotUP1D(upred))
+Operators.bidirectional_chain(ChainPredicateIterator(upred, bpred), NotUP1D(upred))
Operators.select(pyHigherLengthUP1D(200))
shaders_list = [
ConstantThicknessShader(5),
pyBluePrintCirclesShader(3),
pyPerlinNoise1DShader(0.1, 15, 8),
IncreasingColorShader(0.8, 0.8, 0.3, 0.4, 0.3, 0.3, 0.3, 0.1),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/blueprint_ellipses.py b/release/scripts/freestyle/styles/blueprint_ellipses.py
index 3d977a10d1c..4186c69ff20 100644
--- a/release/scripts/freestyle/styles/blueprint_ellipses.py
+++ b/release/scripts/freestyle/styles/blueprint_ellipses.py
@@ -30,13 +30,13 @@ from freestyle.predicates import (
SameShapeIdBP1D,
TrueUP1D,
pyHigherLengthUP1D,
- )
+)
from freestyle.shaders import (
ConstantThicknessShader,
IncreasingColorShader,
pyBluePrintEllipsesShader,
pyPerlinNoise1DShader,
- )
+)
from freestyle.types import Operators
@@ -50,5 +50,5 @@ shaders_list = [
pyBluePrintEllipsesShader(3),
pyPerlinNoise1DShader(0.1, 10, 8),
IncreasingColorShader(0.6, 0.3, 0.3, 0.7, 0.3, 0.3, 0.3, 0.1),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/blueprint_squares.py b/release/scripts/freestyle/styles/blueprint_squares.py
index 7110fe413fc..cba53d8065c 100644
--- a/release/scripts/freestyle/styles/blueprint_squares.py
+++ b/release/scripts/freestyle/styles/blueprint_squares.py
@@ -30,13 +30,13 @@ from freestyle.predicates import (
SameShapeIdBP1D,
TrueUP1D,
pyHigherLengthUP1D,
- )
+)
from freestyle.shaders import (
ConstantThicknessShader,
IncreasingColorShader,
pyBluePrintSquaresShader,
pyPerlinNoise1DShader,
- )
+)
from freestyle.types import Operators
@@ -51,5 +51,5 @@ shaders_list = [
pyPerlinNoise1DShader(0.07, 10, 8),
IncreasingColorShader(0.6, 0.3, 0.3, 0.7, 0.6, 0.3, 0.3, 0.3),
ConstantThicknessShader(4),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/cartoon.py b/release/scripts/freestyle/styles/cartoon.py
index 87518bb832e..e8244803dd6 100644
--- a/release/scripts/freestyle/styles/cartoon.py
+++ b/release/scripts/freestyle/styles/cartoon.py
@@ -28,12 +28,12 @@ from freestyle.predicates import (
NotUP1D,
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
BezierCurveShader,
ConstantThicknessShader,
pyMaterialColorShader,
- )
+)
from freestyle.types import Operators
@@ -43,5 +43,5 @@ shaders_list = [
BezierCurveShader(3),
ConstantThicknessShader(4),
pyMaterialColorShader(0.8),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/contour.py b/release/scripts/freestyle/styles/contour.py
index c57d7d0d23a..eabd38abc20 100644
--- a/release/scripts/freestyle/styles/contour.py
+++ b/release/scripts/freestyle/styles/contour.py
@@ -29,11 +29,11 @@ from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
SameShapeIdBP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantThicknessShader,
IncreasingColorShader,
- )
+)
from freestyle.types import Operators
@@ -43,6 +43,6 @@ upred = AndUP1D(QuantitativeInvisibilityUP1D(0), ContourUP1D())
Operators.bidirectional_chain(ChainPredicateIterator(upred, bpred), NotUP1D(QuantitativeInvisibilityUP1D(0)))
shaders_list = [
ConstantThicknessShader(5.0),
- IncreasingColorShader(0.8,0,0,1,0.1,0,0,1),
- ]
+ IncreasingColorShader(0.8, 0, 0, 1, 0.1, 0, 0, 1),
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/curvature2d.py b/release/scripts/freestyle/styles/curvature2d.py
index faf1223b735..84ee544242a 100644
--- a/release/scripts/freestyle/styles/curvature2d.py
+++ b/release/scripts/freestyle/styles/curvature2d.py
@@ -27,11 +27,11 @@ from freestyle.predicates import (
NotUP1D,
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantThicknessShader,
py2DCurvatureColorShader,
- )
+)
from freestyle.types import Operators, Stroke
@@ -40,5 +40,5 @@ Operators.bidirectional_chain(ChainSilhouetteIterator(), NotUP1D(QuantitativeInv
shaders_list = [
ConstantThicknessShader(5),
py2DCurvatureColorShader()
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/external_contour.py b/release/scripts/freestyle/styles/external_contour.py
index 4d6c751cbfe..37d60dda827 100644
--- a/release/scripts/freestyle/styles/external_contour.py
+++ b/release/scripts/freestyle/styles/external_contour.py
@@ -29,11 +29,11 @@ from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
TrueBP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
- )
+)
from freestyle.types import Operators
@@ -44,5 +44,5 @@ Operators.bidirectional_chain(ChainPredicateIterator(upred, bpred), NotUP1D(upre
shaders_list = [
ConstantThicknessShader(3),
ConstantColorShader(0.0, 0.0, 0.0, 1),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/external_contour_sketchy.py b/release/scripts/freestyle/styles/external_contour_sketchy.py
index 6bccf23ac8d..c0efe8912dc 100644
--- a/release/scripts/freestyle/styles/external_contour_sketchy.py
+++ b/release/scripts/freestyle/styles/external_contour_sketchy.py
@@ -30,14 +30,14 @@ from freestyle.predicates import (
NotUP1D,
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
IncreasingColorShader,
IncreasingThicknessShader,
SamplingShader,
SmoothingShader,
SpatialNoiseShader,
- )
+)
from freestyle.types import Operators
@@ -50,5 +50,5 @@ shaders_list = [
IncreasingThicknessShader(4, 10),
SmoothingShader(400, 0.1, 0, 0.2, 0, 0, 0, 1),
IncreasingColorShader(1, 0, 0, 1, 0, 1, 0, 1),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/external_contour_smooth.py b/release/scripts/freestyle/styles/external_contour_smooth.py
index 6cd73326a71..63e530e3aa0 100644
--- a/release/scripts/freestyle/styles/external_contour_smooth.py
+++ b/release/scripts/freestyle/styles/external_contour_smooth.py
@@ -29,13 +29,13 @@ from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
TrueBP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
IncreasingColorShader,
IncreasingThicknessShader,
SamplingShader,
SmoothingShader,
- )
+)
from freestyle.types import Operators
@@ -45,8 +45,8 @@ bpred = TrueBP1D()
Operators.bidirectional_chain(ChainPredicateIterator(upred, bpred), NotUP1D(upred))
shaders_list = [
SamplingShader(2),
- IncreasingThicknessShader(4,20),
- IncreasingColorShader(1.0, 0.0, 0.5,1, 0.5,1, 0.3, 1),
+ IncreasingThicknessShader(4, 20),
+ IncreasingColorShader(1.0, 0.0, 0.5, 1, 0.5, 1, 0.3, 1),
SmoothingShader(100, 0.05, 0, 0.2, 0, 0, 0, 1),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/haloing.py b/release/scripts/freestyle/styles/haloing.py
index 34e4f65cf91..5f8a419b999 100644
--- a/release/scripts/freestyle/styles/haloing.py
+++ b/release/scripts/freestyle/styles/haloing.py
@@ -31,28 +31,28 @@ from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
TrueUP1D,
pyIsOccludedByUP1D,
- )
+)
from freestyle.shaders import (
IncreasingColorShader,
IncreasingThicknessShader,
SamplingShader,
TipRemoverShader,
pyTVertexRemoverShader,
- )
+)
from freestyle.types import Id, Operators
# id corresponds to the id of the target object
# (accessed by SHIFT+click)
-id = Id(3,0)
+id = Id(3, 0)
upred = AndUP1D(QuantitativeInvisibilityUP1D(0), pyIsOccludedByUP1D(id))
Operators.select(upred)
Operators.bidirectional_chain(ChainSilhouetteIterator(), NotUP1D(upred))
shaders_list = [
IncreasingThicknessShader(3, 5),
- IncreasingColorShader(1,0,0, 1,0,1,0,1),
+ IncreasingColorShader(1, 0, 0, 1, 0, 1, 0, 1),
SamplingShader(1.0),
pyTVertexRemoverShader(),
TipRemoverShader(3.0),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/ignore_small_occlusions.py b/release/scripts/freestyle/styles/ignore_small_occlusions.py
index a01e9e5574f..efa228f4663 100644
--- a/release/scripts/freestyle/styles/ignore_small_occlusions.py
+++ b/release/scripts/freestyle/styles/ignore_small_occlusions.py
@@ -25,21 +25,21 @@ from freestyle.chainingiterators import pyFillOcclusionsAbsoluteChainingIterator
from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
SamplingShader,
- )
+)
from freestyle.types import Operators
Operators.select(QuantitativeInvisibilityUP1D(0))
-#Operators.bidirectional_chain(pyFillOcclusionsChainingIterator(0.1))
+# Operators.bidirectional_chain(pyFillOcclusionsChainingIterator(0.1))
Operators.bidirectional_chain(pyFillOcclusionsAbsoluteChainingIterator(12))
shaders_list = [
SamplingShader(5.0),
ConstantThicknessShader(3),
ConstantColorShader(0.0, 0.0, 0.0),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/invisible_lines.py b/release/scripts/freestyle/styles/invisible_lines.py
index 5506f4ef11f..8b23d346f62 100644
--- a/release/scripts/freestyle/styles/invisible_lines.py
+++ b/release/scripts/freestyle/styles/invisible_lines.py
@@ -27,12 +27,12 @@ from freestyle.predicates import (
NotUP1D,
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
SamplingShader,
- )
+)
from freestyle.types import Operators
@@ -43,5 +43,5 @@ shaders_list = [
SamplingShader(5.0),
ConstantThicknessShader(3.0),
ConstantColorShader(0.7, 0.7, 0.7),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/japanese_bigbrush.py b/release/scripts/freestyle/styles/japanese_bigbrush.py
index a312bcd4358..b81a06daf0d 100644
--- a/release/scripts/freestyle/styles/japanese_bigbrush.py
+++ b/release/scripts/freestyle/styles/japanese_bigbrush.py
@@ -31,7 +31,7 @@ from freestyle.predicates import (
pyHigherNumberOfTurnsUP1D,
pyLengthBP1D,
pyParameterUP0D,
- )
+)
from freestyle.shaders import (
BezierCurveShader,
ConstantColorShader,
@@ -40,20 +40,20 @@ from freestyle.shaders import (
TipRemoverShader,
pyNonLinearVaryingThicknessShader,
pySamplingShader,
- )
+)
from freestyle.types import IntegrationType, Operators
Operators.select(QuantitativeInvisibilityUP1D(0))
Operators.bidirectional_chain(ChainSilhouetteIterator(), NotUP1D(QuantitativeInvisibilityUP1D(0)))
-## Splits strokes at points of highest 2D curvature
-## when there are too many abrupt turns in it
+# Splits strokes at points of highest 2D curvature
+# when there are too many abrupt turns in it
func = pyInverseCurvature2DAngleF0D()
Operators.recursive_split(func, pyParameterUP0D(0.2, 0.8), NotUP1D(pyHigherNumberOfTurnsUP1D(3, 0.5)), 2)
-## Keeps only long enough strokes
+# Keeps only long enough strokes
Operators.select(pyHigherLengthUP1D(100))
-## Sorts so as to draw the longest strokes first
-## (this will be done using the causal density)
+# Sorts so as to draw the longest strokes first
+# (this will be done using the causal density)
Operators.sort(pyLengthBP1D())
shaders_list = [
pySamplingShader(10),
@@ -61,8 +61,8 @@ shaders_list = [
SamplingShader(50),
ConstantThicknessShader(10),
pyNonLinearVaryingThicknessShader(4, 25, 0.6),
- ConstantColorShader(0.2, 0.2, 0.2,1.0),
+ ConstantColorShader(0.2, 0.2, 0.2, 1.0),
TipRemoverShader(10),
- ]
-## Use the causal density to avoid cluttering
+]
+# Use the causal density to avoid cluttering
Operators.create(pyDensityUP1D(8, 0.4, IntegrationType.MEAN), shaders_list)
diff --git a/release/scripts/freestyle/styles/long_anisotropically_dense.py b/release/scripts/freestyle/styles/long_anisotropically_dense.py
index bfd5910cefe..2e720416632 100644
--- a/release/scripts/freestyle/styles/long_anisotropically_dense.py
+++ b/release/scripts/freestyle/styles/long_anisotropically_dense.py
@@ -37,16 +37,16 @@ from freestyle.predicates import (
pyHighDensityAnisotropyUP1D,
pyHigherLengthUP1D,
pyLengthBP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
SamplingShader,
- )
+)
from freestyle.types import IntegrationType, Operators
-## custom density predicate
+# custom density predicate
class pyDensityUP1D(UnaryPredicate1D):
def __init__(self, wsize, threshold, integration=IntegrationType.MEAN, sampling=2.0):
UnaryPredicate1D.__init__(self)
@@ -61,21 +61,22 @@ class pyDensityUP1D(UnaryPredicate1D):
m = self._func2(inter)
if c < self._threshold:
return 1
- if m > 4*c:
- if c < 1.5*self._threshold:
+ if m > 4 * c:
+ if c < 1.5 * self._threshold:
return 1
return 0
+
Operators.select(QuantitativeInvisibilityUP1D(0))
-Operators.bidirectional_chain(ChainSilhouetteIterator(),NotUP1D(QuantitativeInvisibilityUP1D(0)))
+Operators.bidirectional_chain(ChainSilhouetteIterator(), NotUP1D(QuantitativeInvisibilityUP1D(0)))
Operators.select(pyHigherLengthUP1D(40))
-## selects lines having a high anisotropic a priori density
-Operators.select(pyHighDensityAnisotropyUP1D(0.3,4))
+# selects lines having a high anisotropic a priori density
+Operators.select(pyHighDensityAnisotropyUP1D(0.3, 4))
Operators.sort(pyLengthBP1D())
shaders_list = [
SamplingShader(2.0),
ConstantThicknessShader(2),
- ConstantColorShader(0.2,0.2,0.25,1),
- ]
-## uniform culling
-Operators.create(pyDensityUP1D(3.0,2.0e-2, IntegrationType.MEAN, 0.1), shaders_list)
+ ConstantColorShader(0.2, 0.2, 0.25, 1),
+]
+# uniform culling
+Operators.create(pyDensityUP1D(3.0, 2.0e-2, IntegrationType.MEAN, 0.1), shaders_list)
diff --git a/release/scripts/freestyle/styles/multiple_parameterization.py b/release/scripts/freestyle/styles/multiple_parameterization.py
index c03a61c9a81..98ed65d0bd1 100644
--- a/release/scripts/freestyle/styles/multiple_parameterization.py
+++ b/release/scripts/freestyle/styles/multiple_parameterization.py
@@ -31,26 +31,26 @@ from freestyle.chainingiterators import ChainSilhouetteIterator
from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
IncreasingColorShader,
IncreasingThicknessShader,
SamplingShader,
pyHLRShader,
- )
+)
from freestyle.types import Operators
Operators.select(QuantitativeInvisibilityUP1D(0))
-## Chain following the same nature, but without the restriction
-## of staying inside the selection (False).
+# Chain following the same nature, but without the restriction
+# of staying inside the selection (False).
Operators.bidirectional_chain(ChainSilhouetteIterator(False))
shaders_list = [
SamplingShader(20),
IncreasingThicknessShader(1.5, 30),
ConstantColorShader(0.0, 0.0, 0.0),
IncreasingColorShader(1, 0, 0, 1, 0, 1, 0, 1),
- pyHLRShader(), ## this shader draws only visible portions
- ]
+ pyHLRShader(), # this shader draws only visible portions
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/nature.py b/release/scripts/freestyle/styles/nature.py
index 1061f22017a..e8c4f4508b1 100644
--- a/release/scripts/freestyle/styles/nature.py
+++ b/release/scripts/freestyle/styles/nature.py
@@ -30,11 +30,11 @@ from freestyle.predicates import (
NotUP1D,
TrueUP1D,
pyNatureUP1D,
- )
+)
from freestyle.shaders import (
IncreasingColorShader,
IncreasingThicknessShader,
- )
+)
from freestyle.types import Operators, Nature
@@ -43,5 +43,5 @@ Operators.bidirectional_chain(ChainSilhouetteIterator(), NotUP1D(pyNatureUP1D(Na
shaders_list = [
IncreasingThicknessShader(3, 10),
IncreasingColorShader(0.0, 0.0, 0.0, 1, 0.8, 0, 0, 1),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/near_lines.py b/release/scripts/freestyle/styles/near_lines.py
index 14c8d2f9e01..57de57347e7 100644
--- a/release/scripts/freestyle/styles/near_lines.py
+++ b/release/scripts/freestyle/styles/near_lines.py
@@ -29,11 +29,11 @@ from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
TrueUP1D,
pyZSmallerUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
- )
+)
from freestyle.types import IntegrationType, Operators
@@ -43,5 +43,5 @@ Operators.bidirectional_chain(ChainSilhouetteIterator(), NotUP1D(upred))
shaders_list = [
ConstantThicknessShader(5),
ConstantColorShader(0.0, 0.0, 0.0),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/occluded_by_specific_object.py b/release/scripts/freestyle/styles/occluded_by_specific_object.py
index d6f85aed0ac..0f12195eb14 100644
--- a/release/scripts/freestyle/styles/occluded_by_specific_object.py
+++ b/release/scripts/freestyle/styles/occluded_by_specific_object.py
@@ -28,18 +28,18 @@ from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
TrueUP1D,
pyIsInOccludersListUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
SamplingShader,
- )
+)
from freestyle.types import Id, Operators
-## the id of the occluder (use SHIFT+click on the ViewMap to
-## retrieve ids)
-id = Id(3,0)
+# the id of the occluder (use SHIFT+click on the ViewMap to
+# retrieve ids)
+id = Id(3, 0)
upred = AndUP1D(NotUP1D(QuantitativeInvisibilityUP1D(0)), pyIsInOccludersListUP1D(id))
Operators.select(upred)
Operators.bidirectional_chain(ChainSilhouetteIterator(), NotUP1D(upred))
@@ -47,5 +47,5 @@ shaders_list = [
SamplingShader(5),
ConstantThicknessShader(3),
ConstantColorShader(0.3, 0.3, 0.3, 1),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/polygonalize.py b/release/scripts/freestyle/styles/polygonalize.py
index 8eb6e5d56ee..b31cad8d7d5 100644
--- a/release/scripts/freestyle/styles/polygonalize.py
+++ b/release/scripts/freestyle/styles/polygonalize.py
@@ -26,13 +26,13 @@ from freestyle.predicates import (
NotUP1D,
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
PolygonalizationShader,
SamplingShader,
- )
+)
from freestyle.types import Operators
@@ -43,5 +43,5 @@ shaders_list = [
ConstantThicknessShader(3),
ConstantColorShader(0.0, 0.0, 0.0),
PolygonalizationShader(8),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/qi0.py b/release/scripts/freestyle/styles/qi0.py
index 53840f25e0f..a1e8a071236 100644
--- a/release/scripts/freestyle/styles/qi0.py
+++ b/release/scripts/freestyle/styles/qi0.py
@@ -27,12 +27,12 @@ from freestyle.predicates import (
NotUP1D,
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
SamplingShader,
- )
+)
from freestyle.types import Operators
@@ -42,5 +42,5 @@ shaders_list = [
SamplingShader(5.0),
ConstantThicknessShader(4.0),
ConstantColorShader(0.0, 0.0, 0.0)
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/qi0_not_external_contour.py b/release/scripts/freestyle/styles/qi0_not_external_contour.py
index 3c9b8873485..1b3fb0644ad 100644
--- a/release/scripts/freestyle/styles/qi0_not_external_contour.py
+++ b/release/scripts/freestyle/styles/qi0_not_external_contour.py
@@ -29,14 +29,14 @@ from freestyle.predicates import (
NotUP1D,
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
BackboneStretcherShader,
IncreasingColorShader,
IncreasingThicknessShader,
SamplingShader,
SpatialNoiseShader,
- )
+)
from freestyle.types import Operators
@@ -49,5 +49,5 @@ shaders_list = [
IncreasingThicknessShader(2, 5),
BackboneStretcherShader(20),
IncreasingColorShader(1, 0, 0, 1, 0, 1, 0, 1),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/qi1.py b/release/scripts/freestyle/styles/qi1.py
index 4d87055eafb..60d210cd134 100644
--- a/release/scripts/freestyle/styles/qi1.py
+++ b/release/scripts/freestyle/styles/qi1.py
@@ -28,12 +28,12 @@ from freestyle.predicates import (
NotUP1D,
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
SamplingShader,
- )
+)
from freestyle.types import Operators
@@ -43,5 +43,5 @@ shaders_list = [
SamplingShader(5.0),
ConstantThicknessShader(3),
ConstantColorShader(0.5, 0.5, 0.5, 1)
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/qi2.py b/release/scripts/freestyle/styles/qi2.py
index 937b5db590a..f2508241cad 100644
--- a/release/scripts/freestyle/styles/qi2.py
+++ b/release/scripts/freestyle/styles/qi2.py
@@ -28,12 +28,12 @@ from freestyle.predicates import (
NotUP1D,
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
SamplingShader,
- )
+)
from freestyle.types import Operators
@@ -43,5 +43,5 @@ shaders_list = [
SamplingShader(10),
ConstantThicknessShader(1.5),
ConstantColorShader(0.7, 0.7, 0.7, 1),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/sequentialsplit_sketchy.py b/release/scripts/freestyle/styles/sequentialsplit_sketchy.py
index 5755fd3b845..a128787b839 100644
--- a/release/scripts/freestyle/styles/sequentialsplit_sketchy.py
+++ b/release/scripts/freestyle/styles/sequentialsplit_sketchy.py
@@ -30,19 +30,19 @@ from freestyle.predicates import (
TrueUP1D,
pyBackTVertexUP0D,
pyVertexNatureUP0D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
IncreasingThicknessShader,
SpatialNoiseShader,
- )
+)
from freestyle.types import Nature, Operators
upred = QuantitativeInvisibilityUP1D(0)
Operators.select(upred)
Operators.bidirectional_chain(ChainSilhouetteIterator(), NotUP1D(upred))
-## starting and stopping predicates:
+# starting and stopping predicates:
start = pyVertexNatureUP0D(Nature.NON_T_VERTEX)
stop = pyBackTVertexUP0D()
Operators.sequential_split(start, stop, 10)
@@ -50,5 +50,5 @@ shaders_list = [
SpatialNoiseShader(7, 120, 2, True, True),
IncreasingThicknessShader(5, 8),
ConstantColorShader(0.2, 0.2, 0.2, 1),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/sketchy_multiple_parameterization.py b/release/scripts/freestyle/styles/sketchy_multiple_parameterization.py
index 8302ec8e4c3..c3bf7b12bcb 100644
--- a/release/scripts/freestyle/styles/sketchy_multiple_parameterization.py
+++ b/release/scripts/freestyle/styles/sketchy_multiple_parameterization.py
@@ -27,7 +27,7 @@ from freestyle.chainingiterators import pySketchyChainSilhouetteIterator
from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
IncreasingColorShader,
IncreasingThicknessShader,
@@ -35,7 +35,7 @@ from freestyle.shaders import (
SmoothingShader,
SpatialNoiseShader,
pyHLRShader,
- )
+)
from freestyle.types import Operators
@@ -48,5 +48,5 @@ shaders_list = [
SmoothingShader(100, 0.05, 0, 0.2, 0, 0, 0, 1),
IncreasingColorShader(0, 0.2, 0, 1, 0.2, 0.7, 0.2, 1),
pyHLRShader(),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/sketchy_topology_broken.py b/release/scripts/freestyle/styles/sketchy_topology_broken.py
index 191d2d8bcbe..d0b66ff1f51 100644
--- a/release/scripts/freestyle/styles/sketchy_topology_broken.py
+++ b/release/scripts/freestyle/styles/sketchy_topology_broken.py
@@ -27,7 +27,7 @@ from freestyle.chainingiterators import pySketchyChainingIterator
from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
IncreasingColorShader,
IncreasingThicknessShader,
@@ -35,13 +35,13 @@ from freestyle.shaders import (
SmoothingShader,
SpatialNoiseShader,
pyBackboneStretcherNoCuspShader,
- )
+)
from freestyle.types import Operators
Operators.select(QuantitativeInvisibilityUP1D(0))
-## Chain 3 times each ViewEdge independently from the
-## initial objects topology
+# Chain 3 times each ViewEdge independently from the
+# initial objects topology
Operators.bidirectional_chain(pySketchyChainingIterator(3))
shaders_list = [
SamplingShader(4),
@@ -50,5 +50,5 @@ shaders_list = [
SmoothingShader(100, 0.1, 0, 0.2, 0, 0, 0, 1),
pyBackboneStretcherNoCuspShader(20),
IncreasingColorShader(0.2, 0.2, 0.2, 1, 0.5, 0.5, 0.5, 1),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/sketchy_topology_preserved.py b/release/scripts/freestyle/styles/sketchy_topology_preserved.py
index 26c7fd37964..3f5f6acc9a8 100644
--- a/release/scripts/freestyle/styles/sketchy_topology_preserved.py
+++ b/release/scripts/freestyle/styles/sketchy_topology_preserved.py
@@ -27,14 +27,14 @@ from freestyle.chainingiterators import pySketchyChainSilhouetteIterator
from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
IncreasingThicknessShader,
SamplingShader,
SmoothingShader,
SpatialNoiseShader,
- )
+)
from freestyle.types import Operators
@@ -47,5 +47,5 @@ shaders_list = [
IncreasingThicknessShader(4, 8),
SmoothingShader(300, 0.05, 0, 0.2, 0, 0, 0, 0.5),
ConstantColorShader(0.6, 0.2, 0.0),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/split_at_tvertices.py b/release/scripts/freestyle/styles/split_at_tvertices.py
index 8978b98f56b..84a51eb936b 100644
--- a/release/scripts/freestyle/styles/split_at_tvertices.py
+++ b/release/scripts/freestyle/styles/split_at_tvertices.py
@@ -27,22 +27,22 @@ from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
TrueUP1D,
pyVertexNatureUP0D,
- )
+)
from freestyle.shaders import (
ConstantThicknessShader,
IncreasingColorShader,
- )
+)
from freestyle.types import Nature, Operators
Operators.select(QuantitativeInvisibilityUP1D(0))
Operators.bidirectional_chain(ChainSilhouetteIterator(), NotUP1D(QuantitativeInvisibilityUP1D(0)))
start = pyVertexNatureUP0D(Nature.T_VERTEX)
-## use the same predicate to decide where to start and where to stop
-## the strokes:
+# use the same predicate to decide where to start and where to stop
+# the strokes:
Operators.sequential_split(start, start, 10)
shaders_list = [
ConstantThicknessShader(5),
IncreasingColorShader(1, 0, 0, 1, 0, 1, 0, 1),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/suggestive.py b/release/scripts/freestyle/styles/suggestive.py
index 8a97cc0139b..b7cf5b8bc88 100644
--- a/release/scripts/freestyle/styles/suggestive.py
+++ b/release/scripts/freestyle/styles/suggestive.py
@@ -30,11 +30,11 @@ from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
TrueUP1D,
pyNatureUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
IncreasingThicknessShader,
- )
+)
from freestyle.types import Nature, Operators
@@ -44,5 +44,5 @@ Operators.bidirectional_chain(ChainSilhouetteIterator(), NotUP1D(upred))
shaders_list = [
IncreasingThicknessShader(1, 3),
ConstantColorShader(0.2, 0.2, 0.2, 1),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/thickness_fof_depth_discontinuity.py b/release/scripts/freestyle/styles/thickness_fof_depth_discontinuity.py
index 25c196d4919..03738b268d1 100644
--- a/release/scripts/freestyle/styles/thickness_fof_depth_discontinuity.py
+++ b/release/scripts/freestyle/styles/thickness_fof_depth_discontinuity.py
@@ -26,13 +26,13 @@ from freestyle.predicates import (
NotUP1D,
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
SamplingShader,
pyDepthDiscontinuityThicknessShader,
- )
+)
from freestyle.types import Operators
@@ -43,5 +43,5 @@ shaders_list = [
ConstantThicknessShader(3),
ConstantColorShader(0.0, 0.0, 0.0),
pyDepthDiscontinuityThicknessShader(0.8, 6),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/tipremover.py b/release/scripts/freestyle/styles/tipremover.py
index bb070b11464..e5cea57845b 100644
--- a/release/scripts/freestyle/styles/tipremover.py
+++ b/release/scripts/freestyle/styles/tipremover.py
@@ -26,13 +26,13 @@ from freestyle.predicates import (
NotUP1D,
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
SamplingShader,
TipRemoverShader,
- )
+)
from freestyle.types import Operators
@@ -43,5 +43,5 @@ shaders_list = [
ConstantThicknessShader(3),
ConstantColorShader(0, 0, 0),
TipRemoverShader(20),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/tvertex_remover.py b/release/scripts/freestyle/styles/tvertex_remover.py
index d05e4dfc375..0756e7bab5f 100644
--- a/release/scripts/freestyle/styles/tvertex_remover.py
+++ b/release/scripts/freestyle/styles/tvertex_remover.py
@@ -26,13 +26,13 @@ from freestyle.predicates import (
NotUP1D,
QuantitativeInvisibilityUP1D,
TrueUP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
IncreasingThicknessShader,
SamplingShader,
pyTVertexRemoverShader,
- )
+)
from freestyle.types import Operators
@@ -43,5 +43,5 @@ shaders_list = [
ConstantColorShader(0.2, 0.2, 0.2, 1),
SamplingShader(10.0),
pyTVertexRemoverShader(),
- ]
+]
Operators.create(TrueUP1D(), shaders_list)
diff --git a/release/scripts/freestyle/styles/uniformpruning_zsort.py b/release/scripts/freestyle/styles/uniformpruning_zsort.py
index 64e808d9f8a..3ce2743c576 100644
--- a/release/scripts/freestyle/styles/uniformpruning_zsort.py
+++ b/release/scripts/freestyle/styles/uniformpruning_zsort.py
@@ -25,12 +25,12 @@ from freestyle.predicates import (
QuantitativeInvisibilityUP1D,
pyDensityUP1D,
pyZBP1D,
- )
+)
from freestyle.shaders import (
ConstantColorShader,
ConstantThicknessShader,
SamplingShader,
- )
+)
from freestyle.types import IntegrationType, Operators, Stroke
@@ -42,5 +42,5 @@ shaders_list = [
ConstantThicknessShader(3),
SamplingShader(5.0),
ConstantColorShader(0, 0, 0, 1),
- ]
+]
Operators.create(pyDensityUP1D(2, 0.05, IntegrationType.MEAN, 4), shaders_list)
diff --git a/release/scripts/modules/animsys_refactor.py b/release/scripts/modules/animsys_refactor.py
index 7255ce5cd22..97e8a8dd144 100644
--- a/release/scripts/modules/animsys_refactor.py
+++ b/release/scripts/modules/animsys_refactor.py
@@ -80,7 +80,10 @@ class DataPathBuilder:
base_new = Ellipsis
# find the new name
if item.startswith("."):
- for class_name, item_new, options in rna_update_from_map.get(item[1:], []) + [(None, item[1:], None)]:
+ for class_name, item_new, options in (
+ rna_update_from_map.get(item[1:], []) +
+ [(None, item[1:], None)]
+ ):
if callable(item_new):
# No type check here, callback is assumed to know what it's doing.
base_new, item_new = item_new(base, class_name, item[1:], fcurve, options)
diff --git a/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py b/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py
index cee8f89abd3..063e3cafb73 100644
--- a/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py
+++ b/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py
@@ -177,7 +177,7 @@ def print_info(reports, pot):
_print("\t“{}”|“{}”:".format(*key))
# We support multi-lines tooltips now...
# ~ if multi_lines and key in multi_lines:
- # ~ _print("\t\t-> newline in this message!")
+ # ~ _print("\t\t-> newline in this message!")
if not_capitalized and key in not_capitalized:
_print("\t\t-> message not capitalized!")
if end_point and key in end_point:
@@ -456,9 +456,11 @@ def dump_py_messages_from_files(msgs, reports, files, settings):
Recursively get strings, needed in case we have "Blah" + "Blah", passed as an argument in that case it won't
evaluate to a string. However, break on some kind of stopper nodes, like e.g. Subscript.
"""
- if type(node) == ast.Str:
+ # New in py 3.8: all constants are of type 'ast.Constant'.
+ # 'ast.Str' will have to be removed when we officially switch to this version.
+ if type(node) in {ast.Str, getattr(ast, "Constant", None)}:
eval_str = ast.literal_eval(node)
- if eval_str:
+ if eval_str and type(eval_str) == str:
yield (is_split, eval_str, (node,))
else:
is_split = (type(node) in separate_nodes)
@@ -624,6 +626,7 @@ def dump_py_messages_from_files(msgs, reports, files, settings):
}
for fp in files:
+ # ~ print("Checking File ", fp)
with open(fp, 'r', encoding="utf8") as filedata:
root_node = ast.parse(filedata.read(), fp, 'exec')
@@ -631,8 +634,8 @@ def dump_py_messages_from_files(msgs, reports, files, settings):
for node in ast.walk(root_node):
if type(node) == ast.Call:
- # print("found function at")
- # print("%s:%d" % (fp, node.lineno))
+ # ~ print("found function at")
+ # ~ print("%s:%d" % (fp, node.lineno))
# We can't skip such situations! from blah import foo\nfoo("bar") would also be an ast.Name func!
if type(node.func) == ast.Name:
@@ -657,31 +660,31 @@ def dump_py_messages_from_files(msgs, reports, files, settings):
if kw.arg == arg_kw:
context_elements[arg_kw] = kw.value
break
- # print(context_elements)
+ # ~ print(context_elements)
for kws, proc in translate_kw[msgid]:
if set(kws) <= context_elements.keys():
args = tuple(context_elements[k] for k in kws)
- #print("running ", proc, " with ", args)
+ # ~ print("running ", proc, " with ", args)
ctxt = proc(*args)
if ctxt:
msgctxts[msgid] = ctxt
break
- # print(translate_args)
+ # ~ print(func_args)
# do nothing if not found
for arg_kw, (arg_pos, _) in func_args.items():
msgctxt = msgctxts[arg_kw]
estr_lst = [(None, ())]
if arg_pos < len(node.args):
estr_lst = extract_strings_split(node.args[arg_pos])
- #print(estr, nds)
else:
for kw in node.keywords:
if kw.arg == arg_kw:
+ # ~ print(kw.arg, kw.value)
estr_lst = extract_strings_split(kw.value)
break
- #print(estr, nds)
for estr, nds in estr_lst:
+ # ~ print(estr, nds)
if estr:
if nds:
msgsrc = "{}:{}".format(fp_rel, sorted({nd.lineno for nd in nds})[0])
diff --git a/release/scripts/modules/bl_i18n_utils/settings.py b/release/scripts/modules/bl_i18n_utils/settings.py
index a6101474aa9..e304ef5ea17 100644
--- a/release/scripts/modules/bl_i18n_utils/settings.py
+++ b/release/scripts/modules/bl_i18n_utils/settings.py
@@ -376,6 +376,7 @@ WARN_MSGID_NOT_CAPITALIZED_ALLOWED = {
"multi-res modifier",
"non-triangle face",
"normal",
+ "performance impact!",
"right",
"the lazy dog",
"unable to load movie clip",
diff --git a/release/scripts/modules/bl_i18n_utils/utils.py b/release/scripts/modules/bl_i18n_utils/utils.py
index 61837cc0956..4cb25816a34 100644
--- a/release/scripts/modules/bl_i18n_utils/utils.py
+++ b/release/scripts/modules/bl_i18n_utils/utils.py
@@ -185,7 +185,7 @@ def enable_addons(addons=None, support=None, disable=False, check_only=False):
ret = [
mod for mod in addon_utils.modules()
if (((addons and mod.__name__ in addons) or
- (not addons and addon_utils.module_bl_info(mod)["support"] in support)) and
+ (not addons and addon_utils.module_bl_info(mod)["support"] in support)) and
(mod.__name__ not in black_list))
]
diff --git a/release/scripts/modules/bl_i18n_utils/utils_rtl.py b/release/scripts/modules/bl_i18n_utils/utils_rtl.py
index 1a71bb735bc..2b6a56c5deb 100755
--- a/release/scripts/modules/bl_i18n_utils/utils_rtl.py
+++ b/release/scripts/modules/bl_i18n_utils/utils_rtl.py
@@ -37,27 +37,27 @@ import ctypes
import re
-#define FRIBIDI_MASK_NEUTRAL 0x00000040L /* Is neutral */
+# define FRIBIDI_MASK_NEUTRAL 0x00000040L /* Is neutral */
FRIBIDI_PAR_ON = 0x00000040
-#define FRIBIDI_FLAG_SHAPE_MIRRORING 0x00000001
-#define FRIBIDI_FLAG_REORDER_NSM 0x00000002
+# define FRIBIDI_FLAG_SHAPE_MIRRORING 0x00000001
+# define FRIBIDI_FLAG_REORDER_NSM 0x00000002
-#define FRIBIDI_FLAG_SHAPE_ARAB_PRES 0x00000100
-#define FRIBIDI_FLAG_SHAPE_ARAB_LIGA 0x00000200
-#define FRIBIDI_FLAG_SHAPE_ARAB_CONSOLE 0x00000400
+# define FRIBIDI_FLAG_SHAPE_ARAB_PRES 0x00000100
+# define FRIBIDI_FLAG_SHAPE_ARAB_LIGA 0x00000200
+# define FRIBIDI_FLAG_SHAPE_ARAB_CONSOLE 0x00000400
-#define FRIBIDI_FLAG_REMOVE_BIDI 0x00010000
-#define FRIBIDI_FLAG_REMOVE_JOINING 0x00020000
-#define FRIBIDI_FLAG_REMOVE_SPECIALS 0x00040000
+# define FRIBIDI_FLAG_REMOVE_BIDI 0x00010000
+# define FRIBIDI_FLAG_REMOVE_JOINING 0x00020000
+# define FRIBIDI_FLAG_REMOVE_SPECIALS 0x00040000
-#define FRIBIDI_FLAGS_DEFAULT ( \
+# define FRIBIDI_FLAGS_DEFAULT ( \
# FRIBIDI_FLAG_SHAPE_MIRRORING | \
# FRIBIDI_FLAG_REORDER_NSM | \
# FRIBIDI_FLAG_REMOVE_SPECIALS )
-#define FRIBIDI_FLAGS_ARABIC ( \
+# define FRIBIDI_FLAGS_ARABIC ( \
# FRIBIDI_FLAG_SHAPE_ARAB_PRES | \
# FRIBIDI_FLAG_SHAPE_ARAB_LIGA )
diff --git a/release/scripts/modules/bl_i18n_utils/utils_spell_check.py b/release/scripts/modules/bl_i18n_utils/utils_spell_check.py
index 0ec3a322173..05985cac868 100644
--- a/release/scripts/modules/bl_i18n_utils/utils_spell_check.py
+++ b/release/scripts/modules/bl_i18n_utils/utils_spell_check.py
@@ -124,13 +124,14 @@ class SpellChecker:
"forcefield", "forcefields",
"fulldome", "fulldomes",
"fullscreen",
- "gridline",
+ "gridline", "gridlines",
"hardlight",
"hemi",
"hostname",
"inbetween",
"inscatter", "inscattering",
"libdata",
+ "lightcache",
"lightprobe", "lightprobes",
"lightless",
"lineset",
@@ -161,6 +162,7 @@ class SpellChecker:
"online",
"playhead",
"popup", "popups",
+ "pointcloud",
"pre",
"precache", "precaching",
"precalculate",
@@ -182,6 +184,7 @@ class SpellChecker:
"reprojection", "reproject", "reprojecting",
"resize",
"restpose",
+ "resync",
"retarget", "retargets", "retargeting", "retargeted",
"retiming",
"rigidbody",
@@ -605,9 +608,11 @@ class SpellChecker:
"catmull",
"catrom",
"chebychev",
+ "conrady", # Brown-Conrady
"courant",
"cryptomatte", "crypto",
"embree",
+ "gmp",
"hosek",
"kutta",
"lennard",
diff --git a/release/scripts/modules/bl_keymap_utils/io.py b/release/scripts/modules/bl_keymap_utils/io.py
index 8cddbd37ea3..091cdbc2642 100644
--- a/release/scripts/modules/bl_keymap_utils/io.py
+++ b/release/scripts/modules/bl_keymap_utils/io.py
@@ -73,6 +73,11 @@ def kmi_args_as_data(kmi):
if kmi.key_modifier and kmi.key_modifier != 'NONE':
s.append(f"\"key_modifier\": '{kmi.key_modifier}'")
+ if kmi.repeat:
+ if kmi.map_type == 'KEYBOARD':
+ if kmi.value in {'PRESS', 'ANY'}:
+ s.append("\"repeat\": True")
+
return "{" + ", ".join(s) + "}"
@@ -159,8 +164,15 @@ def keyconfig_export_as_data(wm, kc, filepath, *, all_keymaps=False):
# not essential, just convenient to order them predictably.
export_keymaps.sort(key=lambda k: k[0].name)
- with open(filepath, "w") as fh:
+ with open(filepath, "w", encoding="utf-8") as fh:
fw = fh.write
+
+ # Use the file version since it includes the sub-version
+ # which we can bump multiple times between releases.
+ from bpy.app import version_file
+ fw(f"keyconfig_version = {version_file!r}\n")
+ del version_file
+
fw("keyconfig_data = \\\n[")
for km, _kc_x in export_keymaps:
@@ -212,7 +224,11 @@ def keyconfig_export_as_data(wm, kc, filepath, *, all_keymaps=False):
fw("if __name__ == \"__main__\":\n")
fw(" import os\n")
fw(" from bl_keymap_utils.io import keyconfig_import_from_data\n")
- fw(" keyconfig_import_from_data(os.path.splitext(os.path.basename(__file__))[0], keyconfig_data)\n")
+ fw(" keyconfig_import_from_data(\n")
+ fw(" os.path.splitext(os.path.basename(__file__))[0],\n")
+ fw(" keyconfig_data,\n")
+ fw(" keyconfig_version=keyconfig_version,\n")
+ fw(" )\n")
# -----------------------------------------------------------------------------
@@ -264,7 +280,7 @@ def keyconfig_init_from_data(kc, keyconfig_data):
keymap_init_from_data(km, km_items, is_modal=km_args.get("modal", False))
-def keyconfig_import_from_data(name, keyconfig_data):
+def keyconfig_import_from_data(name, keyconfig_data, *, keyconfig_version=(0, 0, 0)):
# Load data in the format defined above.
#
# Runs at load time, keep this fast!
@@ -272,6 +288,9 @@ def keyconfig_import_from_data(name, keyconfig_data):
import bpy
wm = bpy.context.window_manager
kc = wm.keyconfigs.new(name)
+ if keyconfig_version is not None:
+ from .versioning import keyconfig_update
+ keyconfig_data = keyconfig_update(keyconfig_data, keyconfig_version)
keyconfig_init_from_data(kc, keyconfig_data)
return kc
diff --git a/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py b/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py
index 505223872fe..ebc5370a7af 100644
--- a/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py
+++ b/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py
@@ -25,6 +25,7 @@ __all__ = (
"generate",
)
+
def generate(context, space_type, use_fallback_keys=True, use_reset=True):
"""
Keymap for popup toolbar, currently generated each time.
@@ -110,7 +111,6 @@ def generate(context, space_type, use_fallback_keys=True, use_reset=True):
del keymap_src
del items_all_id
-
kmi_unique_args = set()
def kmi_unique_or_pass(kmi_args):
@@ -118,7 +118,6 @@ def generate(context, space_type, use_fallback_keys=True, use_reset=True):
kmi_unique_args.add(dict_as_tuple(kmi_args))
return kmi_unique_len != len(kmi_unique_args)
-
cls = ToolSelectPanelHelper._tool_class_from_space_type(space_type)
if use_hack_properties:
@@ -193,16 +192,25 @@ def generate(context, space_type, use_fallback_keys=True, use_reset=True):
# PAINT_OT_brush_select
mode = context.active_object.mode
# See: BKE_paint_get_tool_prop_id_from_paintmode
- attr = {
- 'SCULPT': "sculpt_tool",
- 'VERTEX_PAINT': "vertex_tool",
- 'WEIGHT_PAINT': "weight_tool",
- 'TEXTURE_PAINT': "image_tool",
- 'PAINT_GPENCIL': "gpencil_tool",
- 'VERTEX_GPENCIL': "gpencil_vertex_tool",
- 'SCULPT_GPENCIL': "gpencil_sculpt_tool",
- 'WEIGHT_GPENCIL': "gpencil_weight_tool",
- }.get(mode, None)
+ if space_type == 'IMAGE_EDITOR':
+ if context.space_data.ui_mode == 'PAINT':
+ attr = "image_tool"
+ else:
+ attr = None
+ elif space_type == 'VIEW_3D':
+ attr = {
+ 'SCULPT': "sculpt_tool",
+ 'VERTEX_PAINT': "vertex_tool",
+ 'WEIGHT_PAINT': "weight_tool",
+ 'TEXTURE_PAINT': "image_tool",
+ 'PAINT_GPENCIL': "gpencil_tool",
+ 'VERTEX_GPENCIL': "gpencil_vertex_tool",
+ 'SCULPT_GPENCIL': "gpencil_sculpt_tool",
+ 'WEIGHT_GPENCIL': "gpencil_weight_tool",
+ }.get(mode, None)
+ else:
+ attr = None
+
if attr is not None:
setattr(kmi_hack_brush_select_properties, attr, item.data_block)
kmi_found = wm.keyconfigs.find_item_from_operator(
@@ -405,7 +413,6 @@ def generate(context, space_type, use_fallback_keys=True, use_reset=True):
kmi.properties.name = item.idname
kmi_unique_args.add(kmi_tuple)
-
# ---------------------
# End Keymap Generation
diff --git a/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
index 3b829de405a..52b9f1601d5 100644
--- a/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
+++ b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
@@ -22,6 +22,7 @@ __all__ = (
"generate",
)
+
def _km_expand_from_toolsystem(space_type, context_mode):
def _fn():
from bl_ui.space_toolsystem_common import ToolSelectPanelHelper
diff --git a/release/scripts/modules/bl_keymap_utils/versioning.py b/release/scripts/modules/bl_keymap_utils/versioning.py
new file mode 100644
index 00000000000..4c2e8ed7f54
--- /dev/null
+++ b/release/scripts/modules/bl_keymap_utils/versioning.py
@@ -0,0 +1,49 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+# Update Blender version this key-map was written in:
+#
+# When the version is ``(0, 0, 0)``, the key-map being loaded didn't contain any versioning information.
+# This will older than ``(2, 92, 0)``.
+
+def keyconfig_update(keyconfig_data, keyconfig_version):
+ from bpy.app import version_file as blender_version
+ if keyconfig_version >= blender_version:
+ return keyconfig_data
+
+ # Version the key-map.
+ import copy
+ has_copy = False
+
+ # Default repeat to false.
+ if keyconfig_version <= (2, 92, 0):
+ # Only copy once.
+ if not has_copy:
+ keyconfig_data = copy.deepcopy(keyconfig_data)
+ has_copy = True
+
+ for _km_name, _km_parms, km_items_data in keyconfig_data:
+ for (_item_op, item_event, _item_prop) in km_items_data["items"]:
+ if item_event.get("value") == 'PRESS':
+ # Unfortunately we don't know the 'map_type' at this point.
+ # Setting repeat true on other kinds of events is harmless.
+ item_event["repeat"] = True
+
+ return keyconfig_data
diff --git a/release/scripts/modules/bl_previews_utils/bl_previews_render.py b/release/scripts/modules/bl_previews_utils/bl_previews_render.py
index bcb2fe8324d..6e3d04e7fa2 100644
--- a/release/scripts/modules/bl_previews_utils/bl_previews_render.py
+++ b/release/scripts/modules/bl_previews_utils/bl_previews_render.py
@@ -135,6 +135,9 @@ def do_previews(do_objects, do_collections, do_scenes, do_data_intern):
scene.render.filepath = os.path.join(bpy.app.tempdir, 'TEMP_preview_render.png')
scene.render.use_overwrite = True
scene.render.use_stamp = False
+ scene.render.threads_mode = 'AUTO'
+ scene.render.tile_x = RENDER_PREVIEW_SIZE // 4
+ scene.render.tile_y = RENDER_PREVIEW_SIZE // 4
image = bpy.data.images.new("TEMP_render_image", RENDER_PREVIEW_SIZE, RENDER_PREVIEW_SIZE, alpha=True)
image.source = 'FILE'
@@ -211,7 +214,8 @@ def do_previews(do_objects, do_collections, do_scenes, do_data_intern):
bpy.data.lights.remove(bpy.data.lights[render_context.light_data, None])
else:
rna_backup_restore(light, render_context.backup_light)
- rna_backup_restore(bpy.data.lights[render_context.light_data, None], render_context.backup_light_data)
+ rna_backup_restore(bpy.data.lights[render_context.light_data,
+ None], render_context.backup_light_data)
except Exception as e:
print("ERROR:", e)
success = False
@@ -229,7 +233,8 @@ def do_previews(do_objects, do_collections, do_scenes, do_data_intern):
def object_bbox_merge(bbox, ob, ob_space, offset_matrix):
# Take collections instances into account (including linked one in this case).
if ob.type == 'EMPTY' and ob.instance_type == 'COLLECTION':
- grp_objects = tuple((ob.name, ob.library.filepath if ob.library else None) for ob in ob.instance_collection.all_objects)
+ grp_objects = tuple((ob.name, ob.library.filepath if ob.library else None)
+ for ob in ob.instance_collection.all_objects)
if (len(grp_objects) == 0):
ob_bbox = ob.bound_box
else:
@@ -390,7 +395,10 @@ def do_previews(do_objects, do_collections, do_scenes, do_data_intern):
bpy.context.window.scene = scene
bpy.ops.object.collection_instance_add(collection=grp.name)
- grp_ob = next((ob for ob in scene.objects if ob.instance_collection and ob.instance_collection.name == grp.name))
+ grp_ob = next((
+ ob for ob in scene.objects
+ if ob.instance_collection and ob.instance_collection.name == grp.name
+ ))
grp_obname = grp_ob.name
bpy.context.view_layer.update()
@@ -470,7 +478,8 @@ def main():
# Get rid of Blender args!
argv = sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else []
- parser = argparse.ArgumentParser(description="Use Blender to generate previews for currently open Blender file's items.")
+ parser = argparse.ArgumentParser(
+ description="Use Blender to generate previews for currently open Blender file's items.")
parser.add_argument('--clear', default=False, action="store_true",
help="Clear previews instead of generating them.")
parser.add_argument('--no_backups', default=False, action="store_true",
diff --git a/release/scripts/modules/bpy/__init__.py b/release/scripts/modules/bpy/__init__.py
index a80135a59e1..3fc5f54b77b 100644
--- a/release/scripts/modules/bpy/__init__.py
+++ b/release/scripts/modules/bpy/__init__.py
@@ -46,13 +46,11 @@ from _bpy import (
# python modules
from . import (
+ ops,
path,
utils,
)
-# fake operator module
-from .ops import ops_fake_module as ops
-
def main():
import sys
diff --git a/release/scripts/modules/bpy/ops.py b/release/scripts/modules/bpy/ops.py
index c2245d908b5..56346d453a2 100644
--- a/release/scripts/modules/bpy/ops.py
+++ b/release/scripts/modules/bpy/ops.py
@@ -19,93 +19,23 @@
# <pep8-80 compliant>
# for slightly faster access
-from _bpy import ops as ops_module
+from _bpy import ops as _ops_module
-# op_add = ops_module.add
-op_dir = ops_module.dir
-op_poll = ops_module.poll
-op_call = ops_module.call
-op_as_string = ops_module.as_string
-op_get_rna_type = ops_module.get_rna_type
-op_get_bl_options = ops_module.get_bl_options
+# op_add = _ops_module.add
+_op_dir = _ops_module.dir
+_op_poll = _ops_module.poll
+_op_call = _ops_module.call
+_op_as_string = _ops_module.as_string
+_op_get_rna_type = _ops_module.get_rna_type
+_op_get_bl_options = _ops_module.get_bl_options
+_ModuleType = type(_ops_module)
-class BPyOps:
- """
- Fake module like class.
-
- bpy.ops
- """
- __slots__ = ()
-
- def __getattr__(self, module):
- """
- gets a bpy.ops submodule
- """
- if module.startswith('__'):
- raise AttributeError(module)
- return BPyOpsSubMod(module)
-
- def __dir__(self):
-
- submodules = set()
-
- # add this classes functions
- for id_name in dir(self.__class__):
- if not id_name.startswith('__'):
- submodules.add(id_name)
-
- for id_name in op_dir():
- id_split = id_name.split('_OT_', 1)
-
- if len(id_split) == 2:
- submodules.add(id_split[0].lower())
- else:
- submodules.add(id_split[0])
-
- return list(submodules)
- def __repr__(self):
- return "<module like class 'bpy.ops'>"
+# -----------------------------------------------------------------------------
+# Callable Operator Wrapper
-
-class BPyOpsSubMod:
- """
- Utility class to fake submodules.
-
- eg. bpy.ops.object
- """
- __slots__ = ("_module",)
-
- def __init__(self, module):
- self._module = module
-
- def __getattr__(self, func):
- """
- gets a bpy.ops.submodule function
- """
- if func.startswith('__'):
- raise AttributeError(func)
- return BPyOpsSubModOp(self._module, func)
-
- def __dir__(self):
-
- functions = set()
-
- module_upper = self._module.upper()
-
- for id_name in op_dir():
- id_split = id_name.split('_OT_', 1)
- if len(id_split) == 2 and module_upper == id_split[0]:
- functions.add(id_split[1])
-
- return list(functions)
-
- def __repr__(self):
- return "<module like class 'bpy.ops.%s'>" % self._module
-
-
-class BPyOpsSubModOp:
+class _BPyOpsSubModOp:
"""
Utility class to fake submodule operators.
@@ -116,13 +46,13 @@ class BPyOpsSubModOp:
def _get_doc(self):
idname = self.idname()
- sig = op_as_string(self.idname())
+ sig = _op_as_string(self.idname())
# XXX You never quite know what you get from bpy.types,
# with operators... Operator and OperatorProperties
# are shadowing each other, and not in the same way for
# native ops and py ones! See T39158.
# op_class = getattr(bpy.types, idname)
- op_class = op_get_rna_type(idname)
+ op_class = _op_get_rna_type(idname)
descr = op_class.description
return "%s\n%s" % (sig, descr)
@@ -171,8 +101,8 @@ class BPyOpsSubModOp:
self._func = func
def poll(self, *args):
- C_dict, C_exec, _C_undo = BPyOpsSubModOp._parse_args(args)
- return op_poll(self.idname_py(), C_dict, C_exec)
+ C_dict, C_exec, _C_undo = _BPyOpsSubModOp._parse_args(args)
+ return _op_poll(self.idname_py(), C_dict, C_exec)
def idname(self):
# submod.foo -> SUBMOD_OT_foo
@@ -193,34 +123,82 @@ class BPyOpsSubModOp:
# NOTE: We only update active view-layer, since that's what
# operators are supposed to operate on. There might be some
# corner cases when operator need a full scene update though.
- BPyOpsSubModOp._view_layer_update(context)
+ _BPyOpsSubModOp._view_layer_update(context)
if args:
- C_dict, C_exec, C_undo = BPyOpsSubModOp._parse_args(args)
- ret = op_call(self.idname_py(), C_dict, kw, C_exec, C_undo)
+ C_dict, C_exec, C_undo = _BPyOpsSubModOp._parse_args(args)
+ ret = _op_call(self.idname_py(), C_dict, kw, C_exec, C_undo)
else:
- ret = op_call(self.idname_py(), None, kw)
+ ret = _op_call(self.idname_py(), None, kw)
if 'FINISHED' in ret and context.window_manager == wm:
- BPyOpsSubModOp._view_layer_update(context)
+ _BPyOpsSubModOp._view_layer_update(context)
return ret
def get_rna_type(self):
"""Internal function for introspection"""
- return op_get_rna_type(self.idname())
+ return _op_get_rna_type(self.idname())
@property
def bl_options(self):
- return op_get_bl_options(self.idname())
+ return _op_get_bl_options(self.idname())
def __repr__(self): # useful display, repr(op)
- # import bpy
- return op_as_string(self.idname())
+ return _op_as_string(self.idname())
def __str__(self): # used for print(...)
return ("<function bpy.ops.%s.%s at 0x%x'>" %
(self._module, self._func, id(self)))
-ops_fake_module = BPyOps()
+# -----------------------------------------------------------------------------
+# Sub-Module Access
+
+def _bpy_ops_submodule__getattr__(module, func):
+ # Return a value from `bpy.ops.{module}.{func}`
+ if func.startswith("__"):
+ raise AttributeError(func)
+ return _BPyOpsSubModOp(module, func)
+
+
+def _bpy_ops_submodule__dir__(module):
+ functions = set()
+ module_upper = module.upper()
+
+ for id_name in _op_dir():
+ id_split = id_name.split("_OT_", 1)
+ if len(id_split) == 2 and module_upper == id_split[0]:
+ functions.add(id_split[1])
+
+ return list(functions)
+
+
+def _bpy_ops_submodule(module):
+ result = _ModuleType("bpy.ops." + module)
+ result.__getattr__ = lambda func: _bpy_ops_submodule__getattr__(module, func)
+ result.__dir__ = lambda: _bpy_ops_submodule__dir__(module)
+ return result
+
+
+# -----------------------------------------------------------------------------
+# Module Access
+
+def __getattr__(module):
+ # Return a value from `bpy.ops.{module}`.
+ if module.startswith("__"):
+ raise AttributeError(module)
+ return _bpy_ops_submodule(module)
+
+
+def __dir__():
+ submodules = set()
+ for id_name in _op_dir():
+ id_split = id_name.split("_OT_", 1)
+
+ if len(id_split) == 2:
+ submodules.add(id_split[0].lower())
+ else:
+ submodules.add(id_split[0])
+
+ return list(submodules)
diff --git a/release/scripts/modules/bpy/utils/__init__.py b/release/scripts/modules/bpy/utils/__init__.py
index 8a67a598ccd..3ff259e0e3e 100644
--- a/release/scripts/modules/bpy/utils/__init__.py
+++ b/release/scripts/modules/bpy/utils/__init__.py
@@ -283,6 +283,8 @@ def load_scripts(reload_scripts=False, refresh_scripts=False):
del _initialize
if reload_scripts:
+ _bpy.context.window_manager.tag_script_reload()
+
import gc
print("gc.collect() -> %d" % gc.collect())
@@ -845,7 +847,6 @@ def register_tool(tool_cls, *, after=None, separator=False, group=False):
# Create a new group
tool_converted = (tool_converted,)
-
tool_def_insert = (
(None, tool_converted) if separator else
(tool_converted,)
diff --git a/release/scripts/modules/bpy/utils/previews.py b/release/scripts/modules/bpy/utils/previews.py
index 511df853d66..7402dbb6c0c 100644
--- a/release/scripts/modules/bpy/utils/previews.py
+++ b/release/scripts/modules/bpy/utils/previews.py
@@ -65,6 +65,10 @@ class ImagePreviewCollection(dict):
# Internal notes:
# - Blender's internal 'PreviewImage' struct uses 'self._uuid' prefix.
+ # - Blender's preview.new/load return the data if it exists,
+ # don't do this for the Python API as it allows accidental re-use of names,
+ # anyone who wants to reuse names can use dict.get() to check if it exists.
+ # We could use this for the C API too (would need some investigation).
def __init__(self):
super().__init__()
diff --git a/release/scripts/modules/bpy_extras/keyconfig_utils.py b/release/scripts/modules/bpy_extras/keyconfig_utils.py
index 8eea2ede425..3d1b087094b 100644
--- a/release/scripts/modules/bpy_extras/keyconfig_utils.py
+++ b/release/scripts/modules/bpy_extras/keyconfig_utils.py
@@ -51,6 +51,7 @@ def addon_keymap_register(keymap_data):
kmap = kconf.keymaps.new(km_name, **km_args)
keymap_init_from_data(kmap, km_content["items"], is_modal=km_modal)
+
def addon_keymap_unregister(keymap_data):
"""
Unregister a set of keymaps for addons.
diff --git a/release/scripts/modules/bpy_extras/node_shader_utils.py b/release/scripts/modules/bpy_extras/node_shader_utils.py
index ce5edde5adf..5ddb42e49fc 100644
--- a/release/scripts/modules/bpy_extras/node_shader_utils.py
+++ b/release/scripts/modules/bpy_extras/node_shader_utils.py
@@ -36,12 +36,15 @@ def _set_check(func):
return func(self, *args, **kwargs)
return wrapper
+
def rgb_to_rgba(rgb):
return list(rgb) + [1.0]
+
def rgba_to_rgb(rgba):
return Color((rgba[0], rgba[1], rgba[2]))
+
# All clamping value shall follow Blender's defined min/max (check relevant node definition .c file).
def values_clamp(val, minv, maxv):
if hasattr(val, "__iter__"):
@@ -110,7 +113,6 @@ class ShaderWrapper():
self._textures = {}
self._grid_locations = set()
-
def use_nodes_get(self):
return self.material.use_nodes
@@ -121,7 +123,6 @@ class ShaderWrapper():
use_nodes = property(use_nodes_get, use_nodes_set)
-
def node_texcoords_get(self):
if not self.use_nodes:
return None
@@ -173,7 +174,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
def __init__(self, material, is_readonly=True, use_nodes=True):
super(PrincipledBSDFWrapper, self).__init__(material, is_readonly, use_nodes)
-
def update(self):
super(PrincipledBSDFWrapper, self).update()
@@ -234,7 +234,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
# Tex Coords, lazy initialization...
self._node_texcoords = ...
-
def node_normalmap_get(self):
if not self.use_nodes or self.node_principled_bsdf is None:
return None
@@ -263,7 +262,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
node_normalmap = property(node_normalmap_get)
-
# --------------------------------------------------------------------
# Base Color.
@@ -282,7 +280,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
base_color = property(base_color_get, base_color_set)
-
def base_color_texture_get(self):
if not self.use_nodes or self.node_principled_bsdf is None:
return None
@@ -294,7 +291,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
base_color_texture = property(base_color_texture_get)
-
# --------------------------------------------------------------------
# Specular.
@@ -312,7 +308,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
specular = property(specular_get, specular_set)
-
def specular_tint_get(self):
if not self.use_nodes or self.node_principled_bsdf is None:
return 0.0
@@ -326,7 +321,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
specular_tint = property(specular_tint_get, specular_tint_set)
-
# Will only be used as gray-scale one...
def specular_texture_get(self):
if not self.use_nodes or self.node_principled_bsdf is None:
@@ -341,7 +335,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
specular_texture = property(specular_texture_get)
-
# --------------------------------------------------------------------
# Roughness (also sort of inverse of specular hardness...).
@@ -359,7 +352,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
roughness = property(roughness_get, roughness_set)
-
# Will only be used as gray-scale one...
def roughness_texture_get(self):
if not self.use_nodes or self.node_principled_bsdf is None:
@@ -373,7 +365,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
roughness_texture = property(roughness_texture_get)
-
# --------------------------------------------------------------------
# Metallic (a.k.a reflection, mirror).
@@ -391,7 +382,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
metallic = property(metallic_get, metallic_set)
-
# Will only be used as gray-scale one...
def metallic_texture_get(self):
if not self.use_nodes or self.node_principled_bsdf is None:
@@ -405,7 +395,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
metallic_texture = property(metallic_texture_get)
-
# --------------------------------------------------------------------
# Transparency settings.
@@ -422,7 +411,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
ior = property(ior_get, ior_set)
-
# Will only be used as gray-scale one...
def ior_texture_get(self):
if not self.use_nodes or self.node_principled_bsdf is None:
@@ -436,7 +424,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
ior_texture = property(ior_texture_get)
-
def transmission_get(self):
if not self.use_nodes or self.node_principled_bsdf is None:
return 0.0
@@ -450,7 +437,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
transmission = property(transmission_get, transmission_set)
-
# Will only be used as gray-scale one...
def transmission_texture_get(self):
if not self.use_nodes or self.node_principled_bsdf is None:
@@ -464,7 +450,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
transmission_texture = property(transmission_texture_get)
-
def alpha_get(self):
if not self.use_nodes or self.node_principled_bsdf is None:
return 1.0
@@ -478,7 +463,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
alpha = property(alpha_get, alpha_set)
-
# Will only be used as gray-scale one...
def alpha_texture_get(self):
if not self.use_nodes or self.node_principled_bsdf is None:
@@ -486,13 +470,13 @@ class PrincipledBSDFWrapper(ShaderWrapper):
return ShaderImageTextureWrapper(
self, self.node_principled_bsdf,
self.node_principled_bsdf.inputs["Alpha"],
+ use_alpha=True,
grid_row_diff=-1,
colorspace_name='Non-Color',
)
alpha_texture = property(alpha_texture_get)
-
# --------------------------------------------------------------------
# Emission color.
@@ -504,13 +488,12 @@ class PrincipledBSDFWrapper(ShaderWrapper):
@_set_check
def emission_color_set(self, color):
if self.use_nodes and self.node_principled_bsdf is not None:
- color = values_clamp(color, 0.0, 1.0)
+ color = values_clamp(color, 0.0, 1000000.0)
color = rgb_to_rgba(color)
self.node_principled_bsdf.inputs["Emission"].default_value = color
emission_color = property(emission_color_get, emission_color_set)
-
def emission_color_texture_get(self):
if not self.use_nodes or self.node_principled_bsdf is None:
return None
@@ -522,6 +505,30 @@ class PrincipledBSDFWrapper(ShaderWrapper):
emission_color_texture = property(emission_color_texture_get)
+ def emission_strength_get(self):
+ if not self.use_nodes or self.node_principled_bsdf is None:
+ return 1.0
+ return self.node_principled_bsdf.inputs["Emission Strength"].default_value
+
+ @_set_check
+ def emission_strength_set(self, value):
+ value = values_clamp(value, 0.0, 1000000.0)
+ if self.use_nodes and self.node_principled_bsdf is not None:
+ self.node_principled_bsdf.inputs["Emission Strength"].default_value = value
+
+ emission_strength = property(emission_strength_get, emission_strength_set)
+
+ def emission_strength_texture_get(self):
+ if not self.use_nodes or self.node_principled_bsdf is None:
+ return None
+ return ShaderImageTextureWrapper(
+ self, self.node_principled_bsdf,
+ self.node_principled_bsdf.inputs["Emission Strength"],
+ grid_row_diff=-1,
+ colorspace_name='Non-Color',
+ )
+
+ emission_strength_texture = property(emission_strength_texture_get)
# --------------------------------------------------------------------
# Normal map.
@@ -539,7 +546,6 @@ class PrincipledBSDFWrapper(ShaderWrapper):
normalmap_strength = property(normalmap_strength_get, normalmap_strength_set)
-
def normalmap_texture_get(self):
if not self.use_nodes or self.node_normalmap is None:
return None
@@ -552,6 +558,7 @@ class PrincipledBSDFWrapper(ShaderWrapper):
normalmap_texture = property(normalmap_texture_get)
+
class ShaderImageTextureWrapper():
"""
Generic 'image texture'-like wrapper, handling image node, some mapping (texture coordinates transformations),
@@ -616,7 +623,6 @@ class ShaderImageTextureWrapper():
if from_node.bl_idname == 'ShaderNodeMapping':
self._node_mapping = from_node
-
def copy_from(self, tex):
# Avoid generating any node in source texture.
is_readonly_back = tex.is_readonly
@@ -630,7 +636,6 @@ class ShaderImageTextureWrapper():
tex.is_readonly = is_readonly_back
-
def copy_mapping_from(self, tex):
# Avoid generating any node in source texture.
is_readonly_back = tex.is_readonly
@@ -659,7 +664,6 @@ class ShaderImageTextureWrapper():
tex.is_readonly = is_readonly_back
-
# --------------------------------------------------------------------
# Image.
@@ -686,7 +690,6 @@ class ShaderImageTextureWrapper():
node_image = property(node_image_get)
-
def image_get(self):
return self.node_image.image if self.node_image is not None else None
@@ -704,7 +707,6 @@ class ShaderImageTextureWrapper():
image = property(image_get, image_set)
-
def projection_get(self):
return self.node_image.projection if self.node_image is not None else 'FLAT'
@@ -714,7 +716,6 @@ class ShaderImageTextureWrapper():
projection = property(projection_get, projection_set)
-
def texcoords_get(self):
if self.node_image is not None:
socket = (self.node_mapping if self.has_mapping_node() else self.node_image).inputs["Vector"]
@@ -736,7 +737,6 @@ class ShaderImageTextureWrapper():
texcoords = property(texcoords_get, texcoords_set)
-
def extension_get(self):
return self.node_image.extension if self.node_image is not None else 'REPEAT'
@@ -746,7 +746,6 @@ class ShaderImageTextureWrapper():
extension = property(extension_get, extension_set)
-
# --------------------------------------------------------------------
# Mapping.
@@ -787,7 +786,6 @@ class ShaderImageTextureWrapper():
node_mapping = property(node_mapping_get)
-
def translation_get(self):
if self.node_mapping is None:
return Vector((0.0, 0.0, 0.0))
@@ -799,7 +797,6 @@ class ShaderImageTextureWrapper():
translation = property(translation_get, translation_set)
-
def rotation_get(self):
if self.node_mapping is None:
return Vector((0.0, 0.0, 0.0))
@@ -811,7 +808,6 @@ class ShaderImageTextureWrapper():
rotation = property(rotation_get, rotation_set)
-
def scale_get(self):
if self.node_mapping is None:
return Vector((1.0, 1.0, 1.0))
diff --git a/release/scripts/modules/bpy_extras/object_utils.py b/release/scripts/modules/bpy_extras/object_utils.py
index 5b7f26ff89c..8d85c19d066 100644
--- a/release/scripts/modules/bpy_extras/object_utils.py
+++ b/release/scripts/modules/bpy_extras/object_utils.py
@@ -215,12 +215,13 @@ def object_add_grid_scale_apply_operator(operator, context):
"""
Scale an operators distance values by the grid size.
"""
+ # This is a Python version of the C function `WM_operator_view3d_unit_defaults`.
grid_scale = object_add_grid_scale(context)
properties = operator.properties
properties_def = properties.bl_rna.properties
for prop_id in properties_def.keys():
- if not properties.is_property_set(prop_id):
+ if not properties.is_property_set(prop_id, ghost=False):
prop_def = properties_def[prop_id]
if prop_def.unit == 'LENGTH' and prop_def.subtype == 'DISTANCE':
setattr(operator, prop_id,
diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py
index bf14d34ed20..d863778a9c2 100644
--- a/release/scripts/modules/bpy_types.py
+++ b/release/scripts/modules/bpy_types.py
@@ -27,6 +27,7 @@ StructMetaPropGroup = bpy_types.bpy_struct_meta_idprop
# Note that methods extended in C are defined in: 'bpy_rna_types_capi.c'
+
class Context(StructRNA):
__slots__ = ()
@@ -352,16 +353,15 @@ class _GenericBone:
@property
def _other_bones(self):
id_data = self.id_data
- id_data_type = type(id_data)
-
- if id_data_type == bpy_types.Object:
- bones = id_data.pose.bones
- elif id_data_type == bpy_types.Armature:
- bones = id_data.edit_bones
- if not bones: # not in edit mode
- bones = id_data.bones
- return bones
+ # `id_data` is an 'Object' for `PosePone`, otherwise it's an `Armature`.
+ if isinstance(self, PoseBone):
+ return id_data.pose.bones
+ if isinstance(self, EditBone):
+ return id_data.edit_bones
+ if isinstance(self, Bone):
+ return id_data.bones
+ raise RuntimeError("Invalid type %r" % self)
class PoseBone(StructRNA, _GenericBone, metaclass=StructMetaPropGroup):
@@ -912,12 +912,12 @@ class Menu(StructRNA, _GenericUI, metaclass=RNAMeta):
for directory in searchpaths:
files.extend([
(f, os.path.join(directory, f))
- for f in os.listdir(directory)
- if (not f.startswith("."))
- if ((filter_ext is None) or
- (filter_ext(os.path.splitext(f)[1])))
- if ((filter_path is None) or
- (filter_path(f)))
+ for f in os.listdir(directory)
+ if (not f.startswith("."))
+ if ((filter_ext is None) or
+ (filter_ext(os.path.splitext(f)[1])))
+ if ((filter_path is None) or
+ (filter_path(f)))
])
files.sort()
diff --git a/release/scripts/modules/console/complete_calltip.py b/release/scripts/modules/console/complete_calltip.py
index 3404bb792fa..611be00b633 100644
--- a/release/scripts/modules/console/complete_calltip.py
+++ b/release/scripts/modules/console/complete_calltip.py
@@ -25,19 +25,19 @@ import re
# regular expression constants
-DEF_DOC = '%s\s*(\(.*?\))'
-DEF_SOURCE = 'def\s+%s\s*(\(.*?\)):'
-RE_EMPTY_LINE = re.compile('^\s*\n')
+DEF_DOC = r'%s\s*(\(.*?\))'
+DEF_SOURCE = r'def\s+%s\s*(\(.*?\)):'
+RE_EMPTY_LINE = re.compile(r'^\s*\n')
RE_FLAG = re.MULTILINE | re.DOTALL
RE_NEWLINE = re.compile('\n+')
-RE_SPACE = re.compile('\s+')
+RE_SPACE = re.compile(r'\s+')
RE_DEF_COMPLETE = re.compile(
# don't start with a quote
'''(?:^|[^"'a-zA-Z0-9_])'''
# start with a \w = [a-zA-Z0-9_]
- '''((\w+'''
+ r'''((\w+'''
# allow also dots and closed bracket pairs []
- '''(?:\w|[.]|\[.+?\])*'''
+ r'''(?:\w|[.]|\[.+?\])*'''
# allow empty string
'''|)'''
# allow opening bracket(s)
diff --git a/release/scripts/modules/console/intellisense.py b/release/scripts/modules/console/intellisense.py
index 6dd858f4bdf..249ddc29e4c 100644
--- a/release/scripts/modules/console/intellisense.py
+++ b/release/scripts/modules/console/intellisense.py
@@ -131,7 +131,7 @@ def expand(line, cursor, namespace, private=True):
if len(matches) == 1:
scrollback = ''
else:
- # causes blender bug [#27495] since string keys may contain '.'
+ # causes blender bug T27495 since string keys may contain '.'
# scrollback = ' '.join([m.split('.')[-1] for m in matches])
# add white space to align with the cursor
diff --git a/release/scripts/modules/gpu_extras/presets.py b/release/scripts/modules/gpu_extras/presets.py
index 015608b3586..81d515904a1 100644
--- a/release/scripts/modules/gpu_extras/presets.py
+++ b/release/scripts/modules/gpu_extras/presets.py
@@ -78,9 +78,10 @@ def draw_texture_2d(texture_id, position, width, height):
coords = ((0, 0), (1, 0), (1, 1), (0, 1))
shader = gpu.shader.from_builtin('2D_IMAGE')
- batch = batch_for_shader(shader, 'TRI_FAN',
- {"pos" : coords,
- "texCoord" : coords})
+ batch = batch_for_shader(
+ shader, 'TRI_FAN',
+ {"pos": coords, "texCoord": coords},
+ )
bgl.glActiveTexture(bgl.GL_TEXTURE0)
bgl.glBindTexture(bgl.GL_TEXTURE_2D, texture_id)
diff --git a/release/scripts/modules/graphviz_export.py b/release/scripts/modules/graphviz_export.py
index fbe23a05940..8df0006811e 100644
--- a/release/scripts/modules/graphviz_export.py
+++ b/release/scripts/modules/graphviz_export.py
@@ -80,7 +80,13 @@ def graph_armature(obj, filepath, FAKE_PARENT=True, CONSTRAINTS=True, DRIVERS=Tr
label.append("%s = %s" % (key, value))
- opts = ["shape=box", "regular=1", "style=filled", "fixedsize=false", 'label="%s"' % compat_str('\n'.join(label))]
+ opts = [
+ "shape=box",
+ "regular=1",
+ "style=filled",
+ "fixedsize=false",
+ 'label="%s"' % compat_str('\n'.join(label)),
+ ]
if bone.name.startswith('ORG'):
opts.append("fillcolor=yellow")
@@ -125,7 +131,15 @@ def graph_armature(obj, filepath, FAKE_PARENT=True, CONSTRAINTS=True, DRIVERS=Tr
subtarget = getattr(constraint, "subtarget", "")
if subtarget:
# TODO, not internal links
- opts = ['dir=forward', "weight=1", "arrowhead=normal", "arrowtail=none", "constraint=false", 'color="red"', 'labelfontsize=4']
+ opts = [
+ 'dir=forward',
+ "weight=1",
+ "arrowhead=normal",
+ "arrowtail=none",
+ "constraint=false",
+ 'color="red"',
+ 'labelfontsize=4',
+ ]
if XTRA_INFO:
label = "%s\n%s" % (constraint.type, constraint.name)
opts.append('label="%s"' % compat_str(label))
@@ -160,7 +174,15 @@ def graph_armature(obj, filepath, FAKE_PARENT=True, CONSTRAINTS=True, DRIVERS=Tr
pbone_target = rna_path_as_pbone(target.data_path)
rna_path_target = target.data_path
if pbone_target:
- opts = ['dir=forward', "weight=1", "arrowhead=normal", "arrowtail=none", "constraint=false", 'color="blue"', "labelfontsize=4"]
+ opts = [
+ 'dir=forward',
+ "weight=1",
+ "arrowhead=normal",
+ "arrowtail=none",
+ "constraint=false",
+ 'color="blue"',
+ "labelfontsize=4",
+ ]
display_source = rna_path.replace("pose.bones", "")
display_target = rna_path_target.replace("pose.bones", "")
if XTRA_INFO:
diff --git a/release/scripts/modules/rna_manual_reference.py b/release/scripts/modules/rna_manual_reference.py
index a8c8b212ecf..00a77ff54c0 100644
--- a/release/scripts/modules/rna_manual_reference.py
+++ b/release/scripts/modules/rna_manual_reference.py
@@ -51,6 +51,7 @@ url_manual_mapping = (
("bpy.types.fluiddomainsettings.sndparticle_bubble_buoyancy*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-sndparticle-bubble-buoyancy"),
("bpy.types.fluiddomainsettings.sndparticle_combined_export*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-sndparticle-combined-export"),
("bpy.types.fluiddomainsettings.use_collision_border_bottom*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-use-collision-border-bottom"),
+ ("bpy.types.fluiddomainsettings.vector_scale_with_magnitude*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-vector-scale-with-magnitude"),
("bpy.types.fluiddomainsettings.use_collision_border_front*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-use-collision-border-front"),
("bpy.types.fluiddomainsettings.use_collision_border_right*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-use-collision-border-right"),
("bpy.types.cyclesobjectsettings.use_adaptive_subdivision*", "render/cycles/object_settings/adaptive_subdiv.html#bpy-types-cyclesobjectsettings-use-adaptive-subdivision"),
@@ -68,16 +69,24 @@ url_manual_mapping = (
("bpy.types.fluiddomainsettings.sndparticle_bubble_drag*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-sndparticle-bubble-drag"),
("bpy.types.linestylegeometrymodifier_backbonestretcher*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/backbone_stretcher.html#bpy-types-linestylegeometrymodifier-backbonestretcher"),
("bpy.types.linestylegeometrymodifier_sinusdisplacement*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/sinus_displacement.html#bpy-types-linestylegeometrymodifier-sinusdisplacement"),
+ ("bpy.types.fluiddomainsettings.color_ramp_field_scale*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-color-ramp-field-scale"),
("bpy.types.fluiddomainsettings.use_adaptive_timesteps*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-use-adaptive-timesteps"),
("bpy.types.fluiddomainsettings.use_dissolve_smoke_log*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-use-dissolve-smoke-log"),
("bpy.types.linestylegeometrymodifier_polygonalization*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/polygonization.html#bpy-types-linestylegeometrymodifier-polygonalization"),
("bpy.ops.view3d.edit_mesh_extrude_move_shrink_fatten*", "modeling/meshes/editing/face/extrude_faces_normal.html#bpy-ops-view3d-edit-mesh-extrude-move-shrink-fatten"),
("bpy.types.cyclesrendersettings.distance_cull_margin*", "render/cycles/render_settings/simplify.html#bpy-types-cyclesrendersettings-distance-cull-margin"),
("bpy.types.fluiddomainsettings.display_interpolation*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-display-interpolation"),
+ ("bpy.types.fluiddomainsettings.gridlines_cell_filter*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-gridlines-cell-filter"),
+ ("bpy.types.fluiddomainsettings.gridlines_color_field*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-gridlines-color-field"),
+ ("bpy.types.fluiddomainsettings.gridlines_lower_bound*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-gridlines-lower-bound"),
+ ("bpy.types.fluiddomainsettings.gridlines_range_color*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-gridlines-range-color"),
+ ("bpy.types.fluiddomainsettings.gridlines_upper_bound*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-gridlines-upper-bound"),
("bpy.types.materialgpencilstyle.use_fill_texture_mix*", "grease_pencil/materials/grease_pencil_shader.html#bpy-types-materialgpencilstyle-use-fill-texture-mix"),
("bpy.types.rendersettings_simplify_gpencil_shader_fx*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-simplify-gpencil-shader-fx"),
("bpy.types.rendersettings_simplify_gpencil_view_fill*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-simplify-gpencil-view-fill"),
+ ("bpy.types.brush.cloth_constraint_softbody_strength*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-cloth-constraint-softbody-strength"),
("bpy.types.brush.elastic_deform_volume_preservation*", "sculpt_paint/sculpting/tools/elastic_deform.html#bpy-types-brush-elastic-deform-volume-preservation"),
+ ("bpy.types.brushgpencilsettings.fill_simplify_level*", "grease_pencil/modes/draw/tool_settings/brushes/fill_brush.html#bpy-types-brushgpencilsettings-fill-simplify-level"),
("bpy.types.brushgpencilsettings.use_jitter_pressure*", "grease_pencil/modes/draw/tool_settings/brushes/draw_brush.html#bpy-types-brushgpencilsettings-use-jitter-pressure"),
("bpy.types.brushgpencilsettings.use_settings_random*", "grease_pencil/modes/draw/tool_settings/brushes/draw_brush.html#bpy-types-brushgpencilsettings-use-settings-random"),
("bpy.types.fluiddomainsettings.mesh_particle_radius*", "physics/fluid/type/domain/liquid/mesh.html#bpy-types-fluiddomainsettings-mesh-particle-radius"),
@@ -91,6 +100,7 @@ url_manual_mapping = (
("bpy.types.toolsettings.use_gpencil_weight_data_add*", "grease_pencil/modes/draw/introduction.html#bpy-types-toolsettings-use-gpencil-weight-data-add"),
("bpy.types.view3doverlay.texture_paint_mode_opacity*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-texture-paint-mode-opacity"),
("bpy.types.brush.surface_smooth_shape_preservation*", "sculpt_paint/sculpting/tools/smooth.html#bpy-types-brush-surface-smooth-shape-preservation"),
+ ("bpy.types.brush.use_cloth_pin_simulation_boundary*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-use-cloth-pin-simulation-boundary"),
("bpy.types.cyclesrendersettings.camera_cull_margin*", "render/cycles/render_settings/simplify.html#bpy-types-cyclesrendersettings-camera-cull-margin"),
("bpy.types.fluiddomainsettings.export_manta_script*", "physics/fluid/type/domain/cache.html#bpy-types-fluiddomainsettings-export-manta-script"),
("bpy.types.fluiddomainsettings.fractions_threshold*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-fractions-threshold"),
@@ -102,6 +112,7 @@ url_manual_mapping = (
("bpy.types.fluiddomainsettings.vector_display_type*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-vector-display-type"),
("bpy.types.linestylegeometrymodifier_perlinnoise1d*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/perlin_noise_1d.html#bpy-types-linestylegeometrymodifier-perlinnoise1d"),
("bpy.types.linestylegeometrymodifier_perlinnoise2d*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/perlin_noise_2d.html#bpy-types-linestylegeometrymodifier-perlinnoise2d"),
+ ("bpy.types.materialgpencilstyle.use_stroke_holdout*", "grease_pencil/materials/grease_pencil_shader.html#bpy-types-materialgpencilstyle-use-stroke-holdout"),
("bpy.types.rendersettings.use_high_quality_normals*", "render/eevee/render_settings/performance.html#bpy-types-rendersettings-use-high-quality-normals"),
("bpy.types.view3doverlay.vertex_paint_mode_opacity*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-vertex-paint-mode-opacity"),
("bpy.ops.view3d.edit_mesh_extrude_individual_move*", "modeling/meshes/editing/face/extrude_faces.html#bpy-ops-view3d-edit-mesh-extrude-individual-move"),
@@ -109,6 +120,7 @@ url_manual_mapping = (
("bpy.types.cyclesrendersettings.use_distance_cull*", "render/cycles/render_settings/simplify.html#bpy-types-cyclesrendersettings-use-distance-cull"),
("bpy.types.fluiddomainsettings.cache_frame_offset*", "physics/fluid/type/domain/cache.html#bpy-types-fluiddomainsettings-cache-frame-offset"),
("bpy.types.fluiddomainsettings.delete_in_obstacle*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-delete-in-obstacle"),
+ ("bpy.types.fluiddomainsettings.fractions_distance*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-fractions-distance"),
("bpy.types.fluiddomainsettings.mesh_concave_lower*", "physics/fluid/type/domain/liquid/mesh.html#bpy-types-fluiddomainsettings-mesh-concave-lower"),
("bpy.types.fluiddomainsettings.mesh_concave_upper*", "physics/fluid/type/domain/liquid/mesh.html#bpy-types-fluiddomainsettings-mesh-concave-upper"),
("bpy.types.fluiddomainsettings.openvdb_data_depth*", "physics/fluid/type/domain/cache.html#bpy-types-fluiddomainsettings-openvdb-data-depth"),
@@ -125,13 +137,13 @@ url_manual_mapping = (
("bpy.types.rendersettings_simplify_gpencil_onplay*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-simplify-gpencil-onplay"),
("bpy.types.rigidbodyconstraint.breaking_threshold*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-breaking-threshold"),
("bpy.types.spacedopesheeteditor.show_pose_markers*", "animation/markers.html#bpy-types-spacedopesheeteditor-show-pose-markers"),
+ ("bpy.types.toolsettings.use_edge_path_live_unwrap*", "modeling/meshes/tools/tool_settings.html#bpy-types-toolsettings-use-edge-path-live-unwrap"),
("bpy.types.toolsettings.use_gpencil_draw_additive*", "grease_pencil/modes/draw/introduction.html#bpy-types-toolsettings-use-gpencil-draw-additive"),
("bpy.types.toolsettings.use_snap_backface_culling*", "editors/3dview/controls/snapping.html#bpy-types-toolsettings-use-snap-backface-culling"),
("bpy.types.toolsettings.use_transform_data_origin*", "scene_layout/object/tools/tool_settings.html#bpy-types-toolsettings-use-transform-data-origin"),
- ("bpy.types.view3doverlay.sculpt_mode_mask_opacity*", "sculpt_paint/sculpting/hide_mask.html#bpy-types-view3doverlay-sculpt-mode-mask-opacity"),
+ ("bpy.types.view3doverlay.sculpt_mode_mask_opacity*", "sculpt_paint/sculpting/editing/mask.html#bpy-types-view3doverlay-sculpt-mode-mask-opacity"),
("bpy.ops.outliner.collection_indirect_only_clear*", "render/layers/layers.html#bpy-ops-outliner-collection-indirect-only-clear"),
("bpy.types.cyclesrendersettings.max_subdivisions*", "render/cycles/render_settings/subdivision.html#bpy-types-cyclesrendersettings-max-subdivisions"),
- ("bpy.types.fluiddomainsettings.axis_slice_method*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-axis-slice-method"),
("bpy.types.fluiddomainsettings.cache_data_format*", "physics/fluid/type/domain/cache.html#bpy-types-fluiddomainsettings-cache-data-format"),
("bpy.types.fluiddomainsettings.cache_frame_start*", "physics/fluid/type/domain/cache.html#bpy-types-fluiddomainsettings-cache-frame-start"),
("bpy.types.fluiddomainsettings.cache_mesh_format*", "physics/fluid/type/domain/cache.html#bpy-types-fluiddomainsettings-cache-mesh-format"),
@@ -141,15 +153,21 @@ url_manual_mapping = (
("bpy.types.fluiddomainsettings.mesh_smoothen_pos*", "physics/fluid/type/domain/liquid/mesh.html#bpy-types-fluiddomainsettings-mesh-smoothen-pos"),
("bpy.types.fluiddomainsettings.simulation_method*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-simulation-method"),
("bpy.types.fluiddomainsettings.use_speed_vectors*", "physics/fluid/type/domain/liquid/mesh.html#bpy-types-fluiddomainsettings-use-speed-vectors"),
+ ("bpy.types.fluiddomainsettings.vector_show_mac_x*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-vector-show-mac-x"),
+ ("bpy.types.fluiddomainsettings.vector_show_mac_y*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-vector-show-mac-y"),
+ ("bpy.types.fluiddomainsettings.vector_show_mac_z*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-vector-show-mac-z"),
("bpy.types.fluideffectorsettings.velocity_factor*", "physics/fluid/type/effector.html#bpy-types-fluideffectorsettings-velocity-factor"),
("bpy.types.linestyle*modifier_distancefromcamera*", "render/freestyle/parameter_editor/line_style/modifiers/color/distance_from_camera.html#bpy-types-linestyle-modifier-distancefromcamera"),
("bpy.types.linestyle*modifier_distancefromobject*", "render/freestyle/parameter_editor/line_style/modifiers/color/distance_from_object.html#bpy-types-linestyle-modifier-distancefromobject"),
("bpy.types.linestylegeometrymodifier_2dtransform*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/2d_transform.html#bpy-types-linestylegeometrymodifier-2dtransform"),
("bpy.types.linestylegeometrymodifier_beziercurve*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/bezier_curve.html#bpy-types-linestylegeometrymodifier-beziercurve"),
+ ("bpy.types.materialgpencilstyle.use_fill_holdout*", "grease_pencil/materials/grease_pencil_shader.html#bpy-types-materialgpencilstyle-use-fill-holdout"),
("bpy.types.particlesettings.use_parent_particles*", "physics/particles/emitter/render.html#bpy-types-particlesettings-use-parent-particles"),
("bpy.types.rigidbodyconstraint.solver_iterations*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-solver-iterations"),
("bpy.types.toolsettings.gpencil_stroke_placement*", "grease_pencil/modes/draw/stroke_placement.html#bpy-types-toolsettings-gpencil-stroke-placement"),
+ ("bpy.ops.armature.rigify_apply_selection_colors*", "addons/rigging/rigify/metarigs.html#bpy-ops-armature-rigify-apply-selection-colors"),
("bpy.types.cyclesrendersettings.use_camera_cull*", "render/cycles/render_settings/simplify.html#bpy-types-cyclesrendersettings-use-camera-cull"),
+ ("bpy.types.fluiddomainsettings.color_ramp_field*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-color-ramp-field"),
("bpy.types.fluiddomainsettings.guide_vel_factor*", "physics/fluid/type/domain/guides.html#bpy-types-fluiddomainsettings-guide-vel-factor"),
("bpy.types.fluideffectorsettings.use_plane_init*", "physics/fluid/type/effector.html#bpy-types-fluideffectorsettings-use-plane-init"),
("bpy.types.linestylegeometrymodifier_tipremover*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/tip_remover.html#bpy-types-linestylegeometrymodifier-tipremover"),
@@ -159,6 +177,9 @@ url_manual_mapping = (
("bpy.ops.sequencer.deinterlace_selected_movies*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-deinterlace-selected-movies"),
("bpy.types.brush.surface_smooth_current_vertex*", "sculpt_paint/sculpting/tools/smooth.html#bpy-types-brush-surface-smooth-current-vertex"),
("bpy.types.brush.use_multiplane_scrape_dynamic*", "sculpt_paint/sculpting/tools/multiplane_scrape.html#bpy-types-brush-use-multiplane-scrape-dynamic"),
+ ("bpy.types.brushgpencilsettings.fill_direction*", "grease_pencil/modes/draw/tool_settings/brushes/fill_brush.html#bpy-types-brushgpencilsettings-fill-direction"),
+ ("bpy.types.brushgpencilsettings.fill_draw_mode*", "grease_pencil/modes/draw/tool_settings/brushes/fill_brush.html#bpy-types-brushgpencilsettings-fill-draw-mode"),
+ ("bpy.types.brushgpencilsettings.fill_threshold*", "grease_pencil/modes/draw/tool_settings/brushes/fill_brush.html#bpy-types-brushgpencilsettings-fill-threshold"),
("bpy.types.clothsettings.vertex_group_pressure*", "physics/cloth/settings/physical_properties.html#bpy-types-clothsettings-vertex-group-pressure"),
("bpy.types.cyclesmaterialsettings.displacement*", "render/cycles/material_settings.html#bpy-types-cyclesmaterialsettings-displacement"),
("bpy.types.fluiddomainsettings.adapt_threshold*", "physics/fluid/type/domain/gas/adaptive_domain.html#bpy-types-fluiddomainsettings-adapt-threshold"),
@@ -191,6 +212,7 @@ url_manual_mapping = (
("bpy.types.fluiddomainsettings.noise_strength*", "physics/fluid/type/domain/gas/noise.html#bpy-types-fluiddomainsettings-noise-strength"),
("bpy.types.fluiddomainsettings.particle_scale*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-particle-scale"),
("bpy.types.fluiddomainsettings.resolution_max*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-resolution-max"),
+ ("bpy.types.fluiddomainsettings.show_gridlines*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-show-gridlines"),
("bpy.types.fluiddomainsettings.use_color_ramp*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-use-color-ramp"),
("bpy.types.fluiddomainsettings.viscosity_base*", "physics/fluid/type/domain/liquid/diffusion.html#bpy-types-fluiddomainsettings-viscosity-base"),
("bpy.types.fluideffectorsettings.use_effector*", "physics/fluid/type/effector.html#bpy-types-fluideffectorsettings-use-effector"),
@@ -199,6 +221,7 @@ url_manual_mapping = (
("bpy.types.gpencilsculptguide.reference_point*", "grease_pencil/modes/draw/guides.html#bpy-types-gpencilsculptguide-reference-point"),
("bpy.types.linestylegeometrymodifier_2doffset*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/2d_offset.html#bpy-types-linestylegeometrymodifier-2doffset"),
("bpy.types.linestylegeometrymodifier_sampling*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/sampling.html#bpy-types-linestylegeometrymodifier-sampling"),
+ ("bpy.types.volumedisplay.interpolation_method*", "modeling/volumes/properties.html#bpy-types-volumedisplay-interpolation-method"),
("bpy.types.clothsettings.use_pressure_volume*", "physics/cloth/settings/physical_properties.html#bpy-types-clothsettings-use-pressure-volume"),
("bpy.types.clothsettings.vertex_group_intern*", "physics/cloth/settings/physical_properties.html#bpy-types-clothsettings-vertex-group-intern"),
("bpy.types.cyclesrendersettings.*dicing_rate*", "render/cycles/render_settings/subdivision.html#bpy-types-cyclesrendersettings-dicing-rate"),
@@ -213,10 +236,14 @@ url_manual_mapping = (
("bpy.types.fluidflowsettings.velocity_normal*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-velocity-normal"),
("bpy.types.materialgpencilstyle.stroke_style*", "grease_pencil/materials/grease_pencil_shader.html#bpy-types-materialgpencilstyle-stroke-style"),
("bpy.types.rendersettings.use_file_extension*", "render/output/settings.html#bpy-types-rendersettings-use-file-extension"),
+ ("bpy.types.sculpt.constant_detail_resolution*", "sculpt_paint/sculpting/tool_settings/dyntopo.html#bpy-types-sculpt-constant-detail-resolution"),
("bpy.types.spaceview3d.transform_orientation*", "editors/3dview/controls/orientation.html#bpy-types-spaceview3d-transform-orientation"),
- ("bpy.types.spaceview3d.use_local_collections*", "editors/3dview/properties/sidebar.html#bpy-types-spaceview3d-use-local-collections"),
+ ("bpy.types.spaceview3d.use_local_collections*", "editors/3dview/sidebar.html#bpy-types-spaceview3d-use-local-collections"),
("bpy.ops.object.constraint_add_with_targets*", "animation/constraints/interface/adding_removing.html#bpy-ops-object-constraint-add-with-targets"),
+ ("bpy.ops.object.material_slot_remove_unused*", "scene_layout/object/editing/cleanup.html#bpy-ops-object-material-slot-remove-unused"),
("bpy.ops.object.vertex_group_copy_to_linked*", "modeling/meshes/properties/vertex_groups/vertex_groups.html#bpy-ops-object-vertex-group-copy-to-linked"),
+ ("bpy.types.brush.cloth_simulation_area_type*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-cloth-simulation-area-type"),
+ ("bpy.types.brushgpencilsettings.fill_factor*", "grease_pencil/modes/draw/tool_settings/brushes/fill_brush.html#bpy-types-brushgpencilsettings-fill-factor"),
("bpy.types.curve.bevel_factor_mapping_start*", "modeling/curves/properties/geometry.html#bpy-types-curve-bevel-factor-mapping-start"),
("bpy.types.cyclesobjectsettings.dicing_rate*", "render/cycles/object_settings/adaptive_subdiv.html#bpy-types-cyclesobjectsettings-dicing-rate"),
("bpy.types.fluiddomainsettings.adapt_margin*", "physics/fluid/type/domain/gas/adaptive_domain.html#bpy-types-fluiddomainsettings-adapt-margin"),
@@ -225,7 +252,7 @@ url_manual_mapping = (
("bpy.types.fluiddomainsettings.guide_source*", "physics/fluid/type/domain/guides.html#bpy-types-fluiddomainsettings-guide-source"),
("bpy.types.fluiddomainsettings.particle_max*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-particle-max"),
("bpy.types.fluiddomainsettings.particle_min*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-particle-min"),
- ("bpy.types.fluiddomainsettings.slice_method*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-slice-method"),
+ ("bpy.types.fluiddomainsettings.vector_field*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-vector-field"),
("bpy.types.fluiddomainsettings.vector_scale*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-vector-scale"),
("bpy.types.fluideffectorsettings.guide_mode*", "physics/fluid/type/effector.html#bpy-types-fluideffectorsettings-guide-mode"),
("bpy.types.fluidflowsettings.texture_offset*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-texture-offset"),
@@ -235,13 +262,14 @@ url_manual_mapping = (
("bpy.types.materialgpencilstyle.show_stroke*", "grease_pencil/materials/grease_pencil_shader.html#bpy-types-materialgpencilstyle-show-stroke"),
("bpy.types.posebone.use_ik_rotation_control*", "animation/armatures/posing/bone_constraints/inverse_kinematics/introduction.html#bpy-types-posebone-use-ik-rotation-control"),
("bpy.types.scenegpencil.antialias_threshold*", "render/cycles/render_settings/grease_pencil.html#bpy-types-scenegpencil-antialias-threshold"),
+ ("bpy.types.spaceuveditor.sticky_select_mode*", "editors/uv/selecting.html#bpy-types-spaceuveditor-sticky-select-mode"),
("bpy.types.spaceview3d.show_object_viewport*", "editors/3dview/display/visibility.html#bpy-types-spaceview3d-show-object-viewport"),
("bpy.ops.constraint.disable_keep_transform*", "animation/constraints/interface/common.html#bpy-ops-constraint-disable-keep-transform"),
("bpy.ops.object.vertex_group_normalize_all*", "sculpt_paint/weight_paint/editing.html#bpy-ops-object-vertex-group-normalize-all"),
("bpy.ops.outliner.collection_exclude_clear*", "render/layers/layers.html#bpy-ops-outliner-collection-exclude-clear"),
("bpy.ops.outliner.collection_holdout_clear*", "render/layers/layers.html#bpy-ops-outliner-collection-holdout-clear"),
- ("bpy.ops.sculpt.face_set_change_visibility*", "sculpt_paint/sculpting/editing.html#bpy-ops-sculpt-face-set-change-visibility"),
- ("bpy.ops.sculpt.face_sets_randomize_colors*", "sculpt_paint/sculpting/editing.html#bpy-ops-sculpt-face-sets-randomize-colors"),
+ ("bpy.ops.sculpt.face_set_change_visibility*", "sculpt_paint/sculpting/editing/face_sets.html#bpy-ops-sculpt-face-set-change-visibility"),
+ ("bpy.ops.sculpt.face_sets_randomize_colors*", "sculpt_paint/sculpting/editing/face_sets.html#bpy-ops-sculpt-face-sets-randomize-colors"),
("bpy.types.brush.disconnected_distance_max*", "sculpt_paint/sculpting/tools/pose.html#bpy-types-brush-disconnected-distance-max"),
("bpy.types.brush.surface_smooth_iterations*", "sculpt_paint/sculpting/tools/smooth.html#bpy-types-brush-surface-smooth-iterations"),
("bpy.types.brushgpencilsettings.pen_jitter*", "grease_pencil/modes/draw/tool_settings/brushes/draw_brush.html#bpy-types-brushgpencilsettings-pen-jitter"),
@@ -266,19 +294,22 @@ url_manual_mapping = (
("bpy.types.rendersettings_simplify_gpencil*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-simplify-gpencil"),
("bpy.types.sceneeevee.use_taa_reprojection*", "render/eevee/render_settings/sampling.html#bpy-types-sceneeevee-use-taa-reprojection"),
("bpy.types.sequenceeditor.use_overlay_lock*", "video_editing/preview/properties.html#bpy-types-sequenceeditor-use-overlay-lock"),
- ("bpy.types.spaceuveditor.show_pixel_coords*", "editors/uv/display_panel.html#bpy-types-spaceuveditor-show-pixel-coords"),
+ ("bpy.types.spaceuveditor.show_pixel_coords*", "editors/uv/sidebar.html#bpy-types-spaceuveditor-show-pixel-coords"),
("bpy.types.toolsettings.gpencil_selectmode*", "grease_pencil/selecting.html#bpy-types-toolsettings-gpencil-selectmode"),
+ ("bpy.types.toolsettings.use_uv_select_sync*", "editors/uv/selecting.html#bpy-types-toolsettings-use-uv-select-sync"),
("bpy.ops.gpencil.active_frames_delete_all*", "grease_pencil/animation/tools.html#bpy-ops-gpencil-active-frames-delete-all"),
("bpy.ops.gpencil.stroke_merge_by_distance*", "grease_pencil/modes/edit/grease_pencil_menu.html#bpy-ops-gpencil-stroke-merge-by-distance"),
("bpy.ops.object.anim_transforms_to_deltas*", "scene_layout/object/editing/apply.html#bpy-ops-object-anim-transforms-to-deltas"),
("bpy.ops.preferences.app_template_install*", "advanced/app_templates.html#bpy-ops-preferences-app-template-install"),
("bpy.types.actionposemarkers.active_index*", "animation/armatures/properties/pose_library.html#bpy-types-actionposemarkers-active-index"),
+ ("bpy.types.brush.cloth_force_falloff_type*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-cloth-force-falloff-type"),
+ ("bpy.types.brushgpencilsettings.fill_leak*", "grease_pencil/modes/draw/tool_settings/brushes/fill_brush.html#bpy-types-brushgpencilsettings-fill-leak"),
+ ("bpy.types.brushgpencilsettings.show_fill*", "grease_pencil/modes/draw/tool_settings/brushes/fill_brush.html#bpy-types-brushgpencilsettings-show-fill"),
("bpy.types.brushgpencilsettings.uv_random*", "grease_pencil/modes/draw/tool_settings/brushes/draw_brush.html#bpy-types-brushgpencilsettings-uv-random"),
("bpy.types.clothsettings.internal_tension*", "physics/cloth/settings/physical_properties.html#bpy-types-clothsettings-internal-tension"),
("bpy.types.compositornodeplanetrackdeform*", "compositing/types/distort/plane_track_deform.html#bpy-types-compositornodeplanetrackdeform"),
("bpy.types.curve.bevel_factor_mapping_end*", "modeling/curves/properties/geometry.html#bpy-types-curve-bevel-factor-mapping-end"),
("bpy.types.fluiddomainsettings.cache_type*", "physics/fluid/type/domain/cache.html#bpy-types-fluiddomainsettings-cache-type"),
- ("bpy.types.fluiddomainsettings.coba_field*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-coba-field"),
("bpy.types.fluiddomainsettings.flip_ratio*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-flip-ratio"),
("bpy.types.fluiddomainsettings.guide_beta*", "physics/fluid/type/domain/guides.html#bpy-types-fluiddomainsettings-guide-beta"),
("bpy.types.fluiddomainsettings.mesh_scale*", "physics/fluid/type/domain/liquid/mesh.html#bpy-types-fluiddomainsettings-mesh-scale"),
@@ -292,6 +323,7 @@ url_manual_mapping = (
("bpy.types.linestylecolormodifier_tangent*", "render/freestyle/parameter_editor/line_style/modifiers/color/tangent.html#bpy-types-linestylecolormodifier-tangent"),
("bpy.types.materialgpencilstyle.mix_color*", "grease_pencil/materials/grease_pencil_shader.html#bpy-types-materialgpencilstyle-mix-color"),
("bpy.types.materialgpencilstyle.show_fill*", "grease_pencil/materials/grease_pencil_shader.html#bpy-types-materialgpencilstyle-show-fill"),
+ ("bpy.types.mesh.use_mirror_vertex_group_x*", "sculpt_paint/weight_paint/tool_settings/symmetry.html#bpy-types-mesh-use-mirror-vertex-group-x"),
("bpy.types.rendersettings.use_placeholder*", "render/output/settings.html#bpy-types-rendersettings-use-placeholder"),
("bpy.types.shadernodesubsurfacescattering*", "render/shader_nodes/shader/sss.html#bpy-types-shadernodesubsurfacescattering"),
("bpy.types.spacedopesheeteditor.auto_snap*", "editors/dope_sheet/editing.html#bpy-types-spacedopesheeteditor-auto-snap"),
@@ -313,6 +345,7 @@ url_manual_mapping = (
("bpy.types.compositornodemoviedistortion*", "compositing/types/distort/movie_distortion.html#bpy-types-compositornodemoviedistortion"),
("bpy.types.fluiddomainsettings.use_guide*", "physics/fluid/type/domain/guides.html#bpy-types-fluiddomainsettings-use-guide"),
("bpy.types.fluiddomainsettings.use_noise*", "physics/fluid/type/domain/gas/noise.html#bpy-types-fluiddomainsettings-use-noise"),
+ ("bpy.types.fluiddomainsettings.use_slice*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-use-slice"),
("bpy.types.fluiddomainsettings.vorticity*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-vorticity"),
("bpy.types.fluidflowsettings.flow_source*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-flow-source"),
("bpy.types.fluidflowsettings.fuel_amount*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-fuel-amount"),
@@ -320,8 +353,8 @@ url_manual_mapping = (
("bpy.types.fluidflowsettings.temperature*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-temperature"),
("bpy.types.fluidflowsettings.use_texture*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-use-texture"),
("bpy.types.fmodifierenvelopecontrolpoint*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifierenvelopecontrolpoint"),
- ("bpy.types.layercollection.hide_viewport*", "editors/outliner.html#bpy-types-layercollection-hide-viewport"),
- ("bpy.types.layercollection.indirect_only*", "editors/outliner.html#bpy-types-layercollection-indirect-only"),
+ ("bpy.types.layercollection.hide_viewport*", "editors/outliner/interface.html#bpy-types-layercollection-hide-viewport"),
+ ("bpy.types.layercollection.indirect_only*", "editors/outliner/interface.html#bpy-types-layercollection-indirect-only"),
("bpy.types.material.use_sss_translucency*", "render/eevee/materials/settings.html#bpy-types-material-use-sss-translucency"),
("bpy.types.rigidbodyconstraint.use_limit*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-use-limit"),
("bpy.types.sceneeevee.taa_render_samples*", "render/eevee/render_settings/sampling.html#bpy-types-sceneeevee-taa-render-samples"),
@@ -332,8 +365,11 @@ url_manual_mapping = (
("bpy.types.toolsettings.mesh_select_mode*", "modeling/meshes/selecting/introduction.html#bpy-types-toolsettings-mesh-select-mode"),
("bpy.types.vertexweightproximitymodifier*", "modeling/modifiers/modify/weight_proximity.html#bpy-types-vertexweightproximitymodifier"),
("bpy.ops.mesh.vertices_smooth_laplacian*", "modeling/meshes/editing/vertex/laplacian_smooth.html#bpy-ops-mesh-vertices-smooth-laplacian"),
+ ("bpy.types.armature.rigify_colors_index*", "addons/rigging/rigify/metarigs.html#bpy-types-armature-rigify-colors-index"),
+ ("bpy.types.armature.rigify_theme_to_add*", "addons/rigging/rigify/metarigs.html#bpy-types-armature-rigify-theme-to-add"),
("bpy.types.brush.pose_smooth_iterations*", "sculpt_paint/sculpting/tools/pose.html#bpy-types-brush-pose-smooth-iterations"),
("bpy.types.brush.use_grab_active_vertex*", "sculpt_paint/sculpting/tools/grab.html#bpy-types-brush-use-grab-active-vertex"),
+ ("bpy.types.brush.use_pose_lock_rotation*", "sculpt_paint/sculpting/tools/pose.html#bpy-types-brush-use-pose-lock-rotation"),
("bpy.types.compositornodebrightcontrast*", "compositing/types/color/bright_contrast.html#bpy-types-compositornodebrightcontrast"),
("bpy.types.compositornodedoubleedgemask*", "compositing/types/matte/double_edge_mask.html#bpy-types-compositornodedoubleedgemask"),
("bpy.types.fluiddomainsettings.clipping*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-clipping"),
@@ -347,24 +383,28 @@ url_manual_mapping = (
("bpy.types.shadernodebsdfhairprincipled*", "render/shader_nodes/shader/hair_principled.html#bpy-types-shadernodebsdfhairprincipled"),
("bpy.types.shadernodevectordisplacement*", "render/shader_nodes/vector/vector_displacement.html#bpy-types-shadernodevectordisplacement"),
("bpy.types.spacegrapheditor.show_cursor*", "editors/graph_editor/introduction.html#bpy-types-spacegrapheditor-show-cursor"),
- ("bpy.types.spaceimageeditor.show_repeat*", "editors/image/view_tab.html#bpy-types-spaceimageeditor-show-repeat"),
+ ("bpy.types.spaceimageeditor.show_repeat*", "editors/image/sidebar.html#bpy-types-spaceimageeditor-show-repeat"),
("bpy.types.spacepreferences.filter_text*", "editors/preferences/keymap.html#bpy-types-spacepreferences-filter-text"),
("bpy.types.spacepreferences.filter_type*", "editors/preferences/keymap.html#bpy-types-spacepreferences-filter-type"),
("bpy.types.spacetexteditor.replace_text*", "editors/text_editor.html#bpy-types-spacetexteditor-replace-text"),
("bpy.types.spacetexteditor.use_find_all*", "editors/text_editor.html#bpy-types-spacetexteditor-use-find-all"),
("bpy.types.volumedisplay.wireframe_type*", "modeling/volumes/properties.html#bpy-types-volumedisplay-wireframe-type"),
("bpy.ops.curve.normals_make_consistent*", "modeling/curves/editing/control_points.html#bpy-ops-curve-normals-make-consistent"),
+ ("bpy.ops.gpencil.frame_clean_duplicate*", "grease_pencil/modes/edit/grease_pencil_menu.html#bpy-ops-gpencil-frame-clean-duplicate"),
("bpy.ops.gpencil.stroke_simplify_fixed*", "grease_pencil/modes/edit/stroke_menu.html#bpy-ops-gpencil-stroke-simplify-fixed"),
("bpy.ops.mesh.faces_select_linked_flat*", "modeling/meshes/selecting/linked.html#bpy-ops-mesh-faces-select-linked-flat"),
("bpy.ops.object.gpencil_modifier_apply*", "grease_pencil/modifiers/introduction.html#bpy-ops-object-gpencil-modifier-apply"),
("bpy.ops.object.vertex_group_normalize*", "sculpt_paint/weight_paint/editing.html#bpy-ops-object-vertex-group-normalize"),
("bpy.ops.object.visual_transform_apply*", "scene_layout/object/editing/apply.html#bpy-ops-object-visual-transform-apply"),
("bpy.ops.sequencer.change_effect_input*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-change-effect-input"),
+ ("bpy.types.armature.rigify_colors_lock*", "addons/rigging/rigify/metarigs.html#bpy-types-armature-rigify-colors-lock"),
+ ("bpy.types.brush.boundary_falloff_type*", "sculpt_paint/sculpting/tools/boundary.html#bpy-types-brush-boundary-falloff-type"),
("bpy.types.brush.texture_overlay_alpha*", "sculpt_paint/brush/cursor.html#bpy-types-brush-texture-overlay-alpha"),
("bpy.types.brushgpencilsettings.random*", "grease_pencil/modes/draw/tool_settings/brushes/draw_brush.html#bpy-types-brushgpencilsettings-random"),
("bpy.types.clothsettings.target_volume*", "physics/cloth/settings/physical_properties.html#bpy-types-clothsettings-target-volume"),
("bpy.types.compositornodebilateralblur*", "compositing/types/filter/bilateral_blur.html#bpy-types-compositornodebilateralblur"),
("bpy.types.compositornodedistancematte*", "compositing/types/matte/distance_key.html#bpy-types-compositornodedistancematte"),
+ ("bpy.types.dopesheet.use_filter_invert*", "editors/graph_editor/channels.html#bpy-types-dopesheet-use-filter-invert"),
("bpy.types.fluiddomainsettings.gravity*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-gravity"),
("bpy.types.fluidflowsettings.flow_type*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-flow-type"),
("bpy.types.fluidflowsettings.subframes*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-subframes"),
@@ -377,10 +417,12 @@ url_manual_mapping = (
("bpy.types.rigidbodyconstraint.object1*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-object1"),
("bpy.types.rigidbodyconstraint.object2*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-object2"),
("bpy.types.sceneeevee.volumetric_light*", "render/eevee/render_settings/volumetrics.html#bpy-types-sceneeevee-volumetric-light"),
+ ("bpy.types.sculpt.detail_refine_method*", "sculpt_paint/sculpting/tool_settings/dyntopo.html#bpy-types-sculpt-detail-refine-method"),
("bpy.types.sculpt.symmetrize_direction*", "sculpt_paint/sculpting/tool_settings/symmetry.html#bpy-types-sculpt-symmetrize-direction"),
("bpy.types.sequenceeditor.show_overlay*", "video_editing/preview/properties.html#bpy-types-sequenceeditor-show-overlay"),
("bpy.types.spacetexteditor.show_margin*", "editors/text_editor.html#bpy-types-spacetexteditor-show-margin"),
("bpy.types.spline.radius_interpolation*", "modeling/curves/properties/active_spline.html#bpy-types-spline-radius-interpolation"),
+ ("bpy.types.toolsettings.uv_select_mode*", "editors/uv/selecting.html#bpy-types-toolsettings-uv-select-mode"),
("bpy.types.viewlayer.material_override*", "render/layers/layers.html#bpy-types-viewlayer-material-override"),
("bpy.ops.gpencil.interpolate_sequence*", "grease_pencil/animation/tools.html#bpy-ops-gpencil-interpolate-sequence"),
("bpy.ops.mesh.normals_make_consistent*", "modeling/meshes/editing/mesh/normals.html#bpy-ops-mesh-normals-make-consistent"),
@@ -390,6 +432,7 @@ url_manual_mapping = (
("bpy.ops.sequencer.change_effect_type*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-change-effect-type"),
("bpy.ops.view3d.localview_remove_from*", "editors/3dview/navigate/local_view.html#bpy-ops-view3d-localview-remove-from"),
("bpy.types.animdata.action_blend_type*", "editors/nla/properties_modifiers.html#bpy-types-animdata-action-blend-type"),
+ ("bpy.types.brush.boundary_deform_type*", "sculpt_paint/sculpting/tools/boundary.html#bpy-types-brush-boundary-deform-type"),
("bpy.types.brush.cursor_overlay_alpha*", "sculpt_paint/brush/cursor.html#bpy-types-brush-cursor-overlay-alpha"),
("bpy.types.brush.normal_radius_factor*", "sculpt_paint/sculpting/tool_settings/brush_settings.html#bpy-types-brush-normal-radius-factor"),
("bpy.types.brush.topology_rake_factor*", "sculpt_paint/sculpting/tool_settings/dyntopo.html#bpy-types-brush-topology-rake-factor"),
@@ -428,6 +471,7 @@ url_manual_mapping = (
("bpy.types.armature.layers_protected*", "animation/armatures/properties/skeleton.html#bpy-types-armature-layers-protected"),
("bpy.types.brush.crease_pinch_factor*", "sculpt_paint/sculpting/tools/snake_hook.html#bpy-types-brush-crease-pinch-factor"),
("bpy.types.brush.elastic_deform_type*", "sculpt_paint/sculpting/tools/elastic_deform.html#bpy-types-brush-elastic-deform-type"),
+ ("bpy.types.brush.use_cloth_collision*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-use-cloth-collision"),
("bpy.types.brush.use_primary_overlay*", "sculpt_paint/brush/cursor.html#bpy-types-brush-use-primary-overlay"),
("bpy.types.camera.passepartout_alpha*", "render/cameras.html#bpy-types-camera-passepartout-alpha"),
("bpy.types.compositornodechromamatte*", "compositing/types/matte/chroma_key.html#bpy-types-compositornodechromamatte"),
@@ -448,6 +492,8 @@ url_manual_mapping = (
("bpy.types.rigidbodyconstraint.limit*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-limit"),
("bpy.types.scene.audio_doppler_speed*", "scene_layout/scene/properties.html#bpy-types-scene-audio-doppler-speed"),
("bpy.types.sceneeevee.bokeh_max_size*", "render/eevee/render_settings/depth_of_field.html#bpy-types-sceneeevee-bokeh-max-size"),
+ ("bpy.types.sculpt.detail_type_method*", "sculpt_paint/sculpting/tool_settings/dyntopo.html#bpy-types-sculpt-detail-type-method"),
+ ("bpy.types.sculpt.use_smooth_shading*", "sculpt_paint/sculpting/tool_settings/dyntopo.html#bpy-types-sculpt-use-smooth-shading"),
("bpy.types.shadernodebsdfanisotropic*", "render/shader_nodes/shader/anisotropic.html#bpy-types-shadernodebsdfanisotropic"),
("bpy.types.shadernodebsdftranslucent*", "render/shader_nodes/shader/translucent.html#bpy-types-shadernodebsdftranslucent"),
("bpy.types.shadernodebsdftransparent*", "render/shader_nodes/shader/transparent.html#bpy-types-shadernodebsdftransparent"),
@@ -457,7 +503,8 @@ url_manual_mapping = (
("bpy.types.spacetexteditor.tab_width*", "editors/text_editor.html#bpy-types-spacetexteditor-tab-width"),
("bpy.types.spaceuveditor.lock_bounds*", "modeling/meshes/uv/editing.html#bpy-types-spaceuveditor-lock-bounds"),
("bpy.types.spline.tilt_interpolation*", "modeling/curves/properties/active_spline.html#bpy-types-spline-tilt-interpolation"),
- ("bpy.ops.mesh.customdata_mask_clear*", "sculpt_paint/sculpting/hide_mask.html#bpy-ops-mesh-customdata-mask-clear"),
+ ("bpy.types.volumedisplay.slice_depth*", "modeling/volumes/properties.html#bpy-types-volumedisplay-slice-depth"),
+ ("bpy.ops.mesh.customdata_mask_clear*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-mesh-customdata-mask-clear"),
("bpy.ops.mesh.extrude_vertices_move*", "modeling/meshes/editing/vertex/extrude_vertices.html#bpy-ops-mesh-extrude-vertices-move"),
("bpy.ops.mesh.mod_weighted_strength*", "modeling/meshes/editing/mesh/normals.html#bpy-ops-mesh-mod-weighted-strength"),
("bpy.ops.mesh.quads_convert_to_tris*", "modeling/meshes/editing/face/triangulate_faces.html#bpy-ops-mesh-quads-convert-to-tris"),
@@ -465,7 +512,7 @@ url_manual_mapping = (
("bpy.ops.mesh.select_similar_region*", "modeling/meshes/selecting/similar.html#bpy-ops-mesh-select-similar-region"),
("bpy.ops.mesh.tris_convert_to_quads*", "modeling/meshes/editing/face/triangles_quads.html#bpy-ops-mesh-tris-convert-to-quads"),
("bpy.ops.node.read_fullsamplelayers*", "interface/controls/nodes/editing.html#bpy-ops-node-read-fullsamplelayers"),
- ("bpy.ops.object.datalayout_transfer*", "scene_layout/object/editing/relations.html#bpy-ops-object-datalayout-transfer"),
+ ("bpy.ops.object.datalayout_transfer*", "scene_layout/object/editing/relations/transfer_mesh_data_layout.html#bpy-ops-object-datalayout-transfer"),
("bpy.ops.object.randomize_transform*", "scene_layout/object/editing/transform/randomize.html#bpy-ops-object-randomize-transform"),
("bpy.ops.object.vertex_group_invert*", "sculpt_paint/weight_paint/editing.html#bpy-ops-object-vertex-group-invert"),
("bpy.ops.object.vertex_group_levels*", "sculpt_paint/weight_paint/editing.html#bpy-ops-object-vertex-group-levels"),
@@ -507,11 +554,12 @@ url_manual_mapping = (
("bpy.types.shadernodebsdfrefraction*", "render/shader_nodes/shader/refraction.html#bpy-types-shadernodebsdfrefraction"),
("bpy.types.shadernodeoutputmaterial*", "render/shader_nodes/output/material.html#bpy-types-shadernodeoutputmaterial"),
("bpy.types.shadernodetexenvironment*", "render/shader_nodes/textures/environment.html#bpy-types-shadernodetexenvironment"),
- ("bpy.types.spaceuveditor.uv_opacity*", "editors/uv/display_panel.html#bpy-types-spaceuveditor-uv-opacity"),
+ ("bpy.types.spaceuveditor.uv_opacity*", "editors/uv/overlays.html#bpy-types-spaceuveditor-uv-opacity"),
("bpy.types.subdividegpencilmodifier*", "grease_pencil/modifiers/generate/subdivide.html#bpy-types-subdividegpencilmodifier"),
("bpy.types.thicknessgpencilmodifier*", "grease_pencil/modifiers/deform/thickness.html#bpy-types-thicknessgpencilmodifier"),
("bpy.types.transformcacheconstraint*", "animation/constraints/transform/transform_cache.html#bpy-types-transformcacheconstraint"),
("bpy.types.vertexweighteditmodifier*", "modeling/modifiers/modify/weight_edit.html#bpy-types-vertexweighteditmodifier"),
+ ("bpy.types.volumedisplay.slice_axis*", "modeling/volumes/properties.html#bpy-types-volumedisplay-slice-axis"),
("bpy.ops.anim.channels_clean_empty*", "editors/nla/editing.html#bpy-ops-anim-channels-clean-empty"),
("bpy.ops.curve.match_texture_space*", "modeling/meshes/uv/uv_texture_spaces.html#bpy-ops-curve-match-texture-space"),
("bpy.ops.font.text_paste_from_file*", "modeling/texts/editing.html#bpy-ops-font-text-paste-from-file"),
@@ -522,10 +570,12 @@ url_manual_mapping = (
("bpy.ops.object.vertex_group_clean*", "sculpt_paint/weight_paint/editing.html#bpy-ops-object-vertex-group-clean"),
("bpy.ops.preferences.theme_install*", "editors/preferences/themes.html#bpy-ops-preferences-theme-install"),
("bpy.ops.render.play-rendered-anim*", "render/output/animation_player.html#bpy-ops-render-play-rendered-anim"),
- ("bpy.ops.sculpt.set_pivot_position*", "sculpt_paint/sculpting/editing.html#bpy-ops-sculpt-set-pivot-position"),
+ ("bpy.ops.sculpt.set_pivot_position*", "sculpt_paint/sculpting/editing/sculpt.html#bpy-ops-sculpt-set-pivot-position"),
("bpy.ops.sequencer.reassign_inputs*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-reassign-inputs"),
("bpy.ops.view3d.view_center_camera*", "editors/3dview/navigate/camera_view.html#bpy-ops-view3d-view-center-camera"),
("bpy.types.armaturegpencilmodifier*", "grease_pencil/modifiers/deform/armature.html#bpy-types-armaturegpencilmodifier"),
+ ("bpy.types.brush.cloth_deform_type*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-cloth-deform-type"),
+ ("bpy.types.brush.cloth_sim_falloff*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-cloth-sim-falloff"),
("bpy.types.brush.slide_deform_type*", "sculpt_paint/sculpting/tools/slide_relax.html#bpy-types-brush-slide-deform-type"),
("bpy.types.camera.show_composition*", "render/cameras.html#bpy-types-camera-show-composition"),
("bpy.types.compositornodealphaover*", "compositing/types/color/alpha_over.html#bpy-types-compositornodealphaover"),
@@ -548,7 +598,8 @@ url_manual_mapping = (
("bpy.types.gpencilsculptguide.type*", "grease_pencil/modes/draw/guides.html#bpy-types-gpencilsculptguide-type"),
("bpy.types.laplaciandeformmodifier*", "modeling/modifiers/deform/laplacian_deform.html#bpy-types-laplaciandeformmodifier"),
("bpy.types.laplaciansmoothmodifier*", "modeling/modifiers/deform/laplacian_smooth.html#bpy-types-laplaciansmoothmodifier"),
- ("bpy.types.layercollection.holdout*", "editors/outliner.html#bpy-types-layercollection-holdout"),
+ ("bpy.types.layercollection.exclude*", "editors/outliner/interface.html#bpy-types-layercollection-exclude"),
+ ("bpy.types.layercollection.holdout*", "editors/outliner/interface.html#bpy-types-layercollection-holdout"),
("bpy.types.limitdistanceconstraint*", "animation/constraints/transform/limit_distance.html#bpy-types-limitdistanceconstraint"),
("bpy.types.limitlocationconstraint*", "animation/constraints/transform/limit_location.html#bpy-types-limitlocationconstraint"),
("bpy.types.limitrotationconstraint*", "animation/constraints/transform/limit_rotation.html#bpy-types-limitrotationconstraint"),
@@ -564,13 +615,13 @@ url_manual_mapping = (
("bpy.types.toolsettings.annotation*", "interface/annotate_tool.html#bpy-types-toolsettings-annotation"),
("bpy.types.vertexweightmixmodifier*", "modeling/modifiers/modify/weight_mix.html#bpy-types-vertexweightmixmodifier"),
("bpy.types.viewlayer.use_freestyle*", "render/freestyle/view_layer.html#bpy-types-viewlayer-use-freestyle"),
+ ("bpy.types.volumedisplay.use_slice*", "modeling/volumes/properties.html#bpy-types-volumedisplay-use-slice"),
("bpy.ops.armature.armature_layers*", "animation/armatures/bones/editing/change_layers.html#bpy-ops-armature-armature-layers"),
("bpy.ops.gpencil.frame_clean_fill*", "grease_pencil/modes/edit/grease_pencil_menu.html#bpy-ops-gpencil-frame-clean-fill"),
("bpy.ops.gpencil.stroke_subdivide*", "grease_pencil/modes/edit/stroke_menu.html#bpy-ops-gpencil-stroke-subdivide"),
("bpy.ops.graph.interpolation_type*", "editors/graph_editor/fcurves/editing.html#bpy-ops-graph-interpolation-type"),
("bpy.ops.mesh.dissolve_degenerate*", "modeling/meshes/editing/mesh/cleanup.html#bpy-ops-mesh-dissolve-degenerate"),
("bpy.ops.mesh.face_split_by_edges*", "modeling/meshes/editing/face/weld_edges_faces.html#bpy-ops-mesh-face-split-by-edges"),
- ("bpy.ops.mesh.intersect_boolean()*", "modeling/meshes/editing/face/intersect_boolean.html#bpy-ops-mesh-intersect-boolean"),
("bpy.ops.mesh.mark_freestyle_face*", "modeling/meshes/editing/face/face_data.html#bpy-ops-mesh-mark-freestyle-face"),
("bpy.ops.mesh.select_non_manifold*", "modeling/meshes/selecting/all_by_trait.html#bpy-ops-mesh-select-non-manifold"),
("bpy.ops.object.constraints_clear*", "animation/constraints/interface/adding_removing.html#bpy-ops-object-constraints-clear"),
@@ -580,8 +631,9 @@ url_manual_mapping = (
("bpy.ops.object.vertex_group_move*", "modeling/meshes/properties/vertex_groups/vertex_groups.html#bpy-ops-object-vertex-group-move"),
("bpy.ops.object.vertex_group_sort*", "modeling/meshes/properties/vertex_groups/vertex_groups.html#bpy-ops-object-vertex-group-sort"),
("bpy.ops.object.vertex_parent_set*", "modeling/meshes/editing/vertex/make_vertex_parent.html#bpy-ops-object-vertex-parent-set"),
- ("bpy.ops.paint.mask_lasso_gesture*", "sculpt_paint/sculpting/hide_mask.html#bpy-ops-paint-mask-lasso-gesture"),
+ ("bpy.ops.paint.mask_lasso_gesture*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-paint-mask-lasso-gesture"),
("bpy.ops.screen.spacedata_cleanup*", "advanced/operators.html#bpy-ops-screen-spacedata-cleanup"),
+ ("bpy.ops.sculpt.detail_flood_fill*", "sculpt_paint/sculpting/tool_settings/dyntopo.html#bpy-ops-sculpt-detail-flood-fill"),
("bpy.ops.sequencer.duplicate_move*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-duplicate-move"),
("bpy.ops.uv.average_islands_scale*", "modeling/meshes/uv/editing.html#bpy-ops-uv-average-islands-scale"),
("bpy.types.armature.pose_position*", "animation/armatures/properties/skeleton.html#bpy-types-armature-pose-position"),
@@ -592,7 +644,7 @@ url_manual_mapping = (
("bpy.types.brush.pose_origin_type*", "sculpt_paint/sculpting/tools/pose.html#bpy-types-brush-pose-origin-type"),
("bpy.types.camerasolverconstraint*", "animation/constraints/motion_tracking/camera_solver.html#bpy-types-camerasolverconstraint"),
("bpy.types.clothcollisionsettings*", "physics/cloth/settings/collisions.html#bpy-types-clothcollisionsettings"),
- ("bpy.types.collection.hide_select*", "editors/outliner.html#bpy-types-collection-hide-select"),
+ ("bpy.types.collection.hide_select*", "editors/outliner/interface.html#bpy-types-collection-hide-select"),
("bpy.types.compositornodecurvergb*", "compositing/types/color/rgb_curves.html#bpy-types-compositornodecurvergb"),
("bpy.types.compositornodecurvevec*", "compositing/types/vector/vector_curves.html#bpy-types-compositornodecurvevec"),
("bpy.types.compositornodedisplace*", "compositing/types/distort/displace.html#bpy-types-compositornodedisplace"),
@@ -619,6 +671,7 @@ url_manual_mapping = (
("bpy.types.particlesystemmodifier*", "physics/particles/index.html#bpy-types-particlesystemmodifier"),
("bpy.types.sceneeevee.motion_blur*", "render/eevee/render_settings/motion_blur.html#bpy-types-sceneeevee-motion-blur"),
("bpy.types.sceneeevee.taa_samples*", "render/eevee/render_settings/sampling.html#bpy-types-sceneeevee-taa-samples"),
+ ("bpy.types.sculpt.radial_symmetry*", "sculpt_paint/sculpting/tool_settings/symmetry.html#bpy-types-sculpt-radial-symmetry"),
("bpy.types.sequenceeditor.overlay*", "video_editing/preview/properties.html#bpy-types-sequenceeditor-overlay"),
("bpy.types.shadernodedisplacement*", "render/shader_nodes/vector/displacement.html#bpy-types-shadernodedisplacement"),
("bpy.types.shadernodelightfalloff*", "render/shader_nodes/color/light_falloff.html#bpy-types-shadernodelightfalloff"),
@@ -635,13 +688,15 @@ url_manual_mapping = (
("bpy.ops.gpencil.stroke_caps_set*", "grease_pencil/modes/edit/stroke_menu.html#bpy-ops-gpencil-stroke-caps-set"),
("bpy.ops.gpencil.stroke_separate*", "grease_pencil/modes/edit/grease_pencil_menu.html#bpy-ops-gpencil-stroke-separate"),
("bpy.ops.gpencil.stroke_simplify*", "grease_pencil/modes/edit/stroke_menu.html#bpy-ops-gpencil-stroke-simplify"),
+ ("bpy.ops.graph.snap_cursor_value*", "editors/graph_editor/fcurves/editing.html#bpy-ops-graph-snap-cursor-value"),
("bpy.ops.mesh.extrude_edges_move*", "modeling/meshes/editing/edge/extrude_edges.html#bpy-ops-mesh-extrude-edges-move"),
("bpy.ops.mesh.extrude_faces_move*", "modeling/meshes/editing/face/extrude_individual_faces.html#bpy-ops-mesh-extrude-faces-move"),
("bpy.ops.mesh.faces_shade_smooth*", "modeling/meshes/editing/face/shading.html#bpy-ops-mesh-faces-shade-smooth"),
+ ("bpy.ops.mesh.paint_mask_extract*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-mesh-paint-mask-extract"),
("bpy.ops.mesh.subdivide_edgering*", "modeling/meshes/editing/edge/subdivide_edge_ring.html#bpy-ops-mesh-subdivide-edgering"),
("bpy.ops.object.constraints_copy*", "animation/constraints/interface/adding_removing.html#bpy-ops-object-constraints-copy"),
("bpy.ops.object.gpencil_modifier*", "grease_pencil/modifiers/index.html#bpy-ops-object-gpencil-modifier"),
- ("bpy.ops.object.make_single_user*", "scene_layout/object/editing/relations.html#bpy-ops-object-make-single-user"),
+ ("bpy.ops.object.make_single_user*", "scene_layout/object/editing/relations/make_single_user.html#bpy-ops-object-make-single-user"),
("bpy.ops.object.select_hierarchy*", "scene_layout/object/selecting.html#bpy-ops-object-select-hierarchy"),
("bpy.ops.object.vertex_group_add*", "modeling/meshes/properties/vertex_groups/vertex_groups.html#bpy-ops-object-vertex-group-add"),
("bpy.ops.object.vertex_group_fix*", "sculpt_paint/weight_paint/editing.html#bpy-ops-object-vertex-group-fix"),
@@ -651,7 +706,7 @@ url_manual_mapping = (
("bpy.ops.preferences.studiolight*", "editors/preferences/lights.html#bpy-ops-preferences-studiolight"),
("bpy.ops.scene.view_layer_remove*", "render/layers/layers.html#bpy-ops-scene-view-layer-remove"),
("bpy.ops.screen.screen_full_area*", "interface/window_system/areas.html#bpy-ops-screen-screen-full-area"),
- ("bpy.ops.sculpt.face_sets_create*", "sculpt_paint/sculpting/editing.html#bpy-ops-sculpt-face-sets-create"),
+ ("bpy.ops.sculpt.face_sets_create*", "sculpt_paint/sculpting/editing/face_sets.html#bpy-ops-sculpt-face-sets-create"),
("bpy.ops.transform.rotate_normal*", "modeling/meshes/editing/mesh/normals.html#bpy-ops-transform-rotate-normal"),
("bpy.ops.transform.shrink_fatten*", "modeling/meshes/editing/mesh/transform/shrink-fatten.html#bpy-ops-transform-shrink-fatten"),
("bpy.ops.transform.vertex_random*", "modeling/meshes/editing/mesh/transform/randomize.html#bpy-ops-transform-vertex-random"),
@@ -659,6 +714,8 @@ url_manual_mapping = (
("bpy.ops.wm.operator_cheat_sheet*", "advanced/operators.html#bpy-ops-wm-operator-cheat-sheet"),
("bpy.ops.wm.previews_batch_clear*", "files/blend/previews.html#bpy-ops-wm-previews-batch-clear"),
("bpy.types.armature.use_mirror_x*", "animation/armatures/bones/tools/tool_settings.html#bpy-types-armature-use-mirror-x"),
+ ("bpy.types.brush.boundary_offset*", "sculpt_paint/sculpting/tools/boundary.html#bpy-types-brush-boundary-offset"),
+ ("bpy.types.brush.cloth_sim_limit*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-cloth-sim-limit"),
("bpy.types.brush.use_custom_icon*", "sculpt_paint/brush/brush.html#bpy-types-brush-use-custom-icon"),
("bpy.types.brushtextureslot.mask*", "sculpt_paint/brush/texture.html#bpy-types-brushtextureslot-mask"),
("bpy.types.camerabackgroundimage*", "render/cameras.html#bpy-types-camerabackgroundimage"),
@@ -675,6 +732,7 @@ url_manual_mapping = (
("bpy.types.curve.use_path_follow*", "modeling/curves/properties/path_animation.html#bpy-types-curve-use-path-follow"),
("bpy.types.dampedtrackconstraint*", "animation/constraints/tracking/damped_track.html#bpy-types-dampedtrackconstraint"),
("bpy.types.distortednoisetexture*", "render/materials/legacy_textures/types/distorted_noise.html#bpy-types-distortednoisetexture"),
+ ("bpy.types.dopesheet.filter_text*", "editors/graph_editor/channels.html#bpy-types-dopesheet-filter-text"),
("bpy.types.fluideffectorsettings*", "physics/fluid/type/effector.html#bpy-types-fluideffectorsettings"),
("bpy.types.followtrackconstraint*", "animation/constraints/motion_tracking/follow_track.html#bpy-types-followtrackconstraint"),
("bpy.types.gpencilsculptsettings*", "grease_pencil/properties/index.html#bpy-types-gpencilsculptsettings"),
@@ -685,7 +743,9 @@ url_manual_mapping = (
("bpy.types.offsetgpencilmodifier*", "grease_pencil/modifiers/deform/offset.html#bpy-types-offsetgpencilmodifier"),
("bpy.types.particlefluidsettings*", "physics/particles/emitter/physics/fluid.html#bpy-types-particlefluidsettings"),
("bpy.types.posebone.custom_shape*", "animation/armatures/bones/properties/display.html#bpy-types-posebone-custom-shape"),
+ ("bpy.types.rigifyselectioncolors*", "addons/rigging/rigify/metarigs.html#bpy-types-rigifyselectioncolors"),
("bpy.types.sceneeevee.volumetric*", "render/eevee/render_settings/volumetrics.html#bpy-types-sceneeevee-volumetric"),
+ ("bpy.types.sculpt.detail_percent*", "sculpt_paint/sculpting/tool_settings/dyntopo.html#bpy-types-sculpt-detail-percent"),
("bpy.types.sculpt.gravity_object*", "sculpt_paint/sculpting/tool_settings/options.html#bpy-types-sculpt-gravity-object"),
("bpy.types.shadernodebsdfdiffuse*", "render/shader_nodes/shader/diffuse.html#bpy-types-shadernodebsdfdiffuse"),
("bpy.types.shadernodelayerweight*", "render/shader_nodes/input/layer_weight.html#bpy-types-shadernodelayerweight"),
@@ -705,13 +765,15 @@ url_manual_mapping = (
("bpy.ops.gpencil.duplicate_move*", "grease_pencil/modes/edit/grease_pencil_menu.html#bpy-ops-gpencil-duplicate-move"),
("bpy.ops.gpencil.stroke_arrange*", "grease_pencil/modes/edit/stroke_menu.html#bpy-ops-gpencil-stroke-arrange"),
("bpy.ops.mesh.bridge-edge-loops*", "modeling/meshes/editing/edge/bridge_edge_loops.html#bpy-ops-mesh-bridge-edge-loops"),
+ ("bpy.ops.mesh.intersect_boolean*", "modeling/meshes/editing/face/intersect_boolean.html#bpy-ops-mesh-intersect-boolean"),
("bpy.ops.mesh.loop_multi_select*", "modeling/meshes/selecting/loops.html#bpy-ops-mesh-loop-multi-select"),
("bpy.ops.mesh.vert_connect_path*", "modeling/meshes/editing/vertex/connect_vertex_path.html#bpy-ops-mesh-vert-connect-path"),
("bpy.ops.nla.action_sync_length*", "editors/nla/editing.html#bpy-ops-nla-action-sync-length"),
("bpy.ops.object.paths_calculate*", "animation/motion_paths.html#bpy-ops-object-paths-calculate"),
("bpy.ops.object.transform_apply*", "scene_layout/object/editing/apply.html#bpy-ops-object-transform-apply"),
- ("bpy.ops.outliner.lib_operation*", "files/linked_libraries/introduction.html#bpy-ops-outliner-lib-operation"),
- ("bpy.ops.outliner.orphans_purge*", "editors/outliner.html#bpy-ops-outliner-orphans-purge"),
+ ("bpy.ops.outliner.lib_operation*", "files/linked_libraries/link_append.html#bpy-ops-outliner-lib-operation"),
+ ("bpy.ops.outliner.orphans_purge*", "editors/outliner/interface.html#bpy-ops-outliner-orphans-purge"),
+ ("bpy.ops.paint.mask_box_gesture*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-paint-mask-box-gesture"),
("bpy.ops.screen.region_quadview*", "editors/3dview/navigate/views.html#bpy-ops-screen-region-quadview"),
("bpy.ops.sequencer.offset_clear*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-offset-clear"),
("bpy.ops.uv.follow_active_quads*", "modeling/meshes/editing/uv.html#bpy-ops-uv-follow-active-quads"),
@@ -737,10 +799,12 @@ url_manual_mapping = (
("bpy.types.followpathconstraint*", "animation/constraints/relationship/follow_path.html#bpy-types-followpathconstraint"),
("bpy.types.gaussianblursequence*", "video_editing/sequencer/strips/effects/blur.html#bpy-types-gaussianblursequence"),
("bpy.types.gpencillayer.opacity*", "grease_pencil/properties/layers.html#bpy-types-gpencillayer-opacity"),
- ("bpy.types.image.display_aspect*", "editors/image/view_tab.html#bpy-types-image-display-aspect"),
+ ("bpy.types.image.display_aspect*", "editors/image/sidebar.html#bpy-types-image-display-aspect"),
("bpy.types.limitscaleconstraint*", "animation/constraints/transform/limit_scale.html#bpy-types-limitscaleconstraint"),
("bpy.types.materialgpencilstyle*", "grease_pencil/materials/index.html#bpy-types-materialgpencilstyle"),
("bpy.types.mesh.use_auto_smooth*", "modeling/meshes/structure.html#bpy-types-mesh-use-auto-smooth"),
+ ("bpy.types.object.hide_viewport*", "scene_layout/object/properties/visibility.html#bpy-types-object-hide-viewport"),
+ ("bpy.types.posebone.rigify_type*", "addons/rigging/rigify/rig_types/index.html#bpy-types-posebone-rigify-type"),
("bpy.types.preferencesfilepaths*", "editors/preferences/file_paths.html#bpy-types-preferencesfilepaths"),
("bpy.types.scene.background_set*", "scene_layout/scene/properties.html#bpy-types-scene-background-set"),
("bpy.types.shadernodebackground*", "render/shader_nodes/shader/background.html#bpy-types-shadernodebackground"),
@@ -772,22 +836,23 @@ url_manual_mapping = (
("bpy.ops.mesh.blend_from_shape*", "modeling/meshes/editing/vertex/blend_shape.html#bpy-ops-mesh-blend-from-shape"),
("bpy.ops.mesh.dissolve_limited*", "modeling/meshes/editing/mesh/delete.html#bpy-ops-mesh-dissolve-limited"),
("bpy.ops.mesh.face_make_planar*", "modeling/meshes/editing/mesh/cleanup.html#bpy-ops-mesh-face-make-planar"),
+ ("bpy.ops.mesh.face_set_extract*", "sculpt_paint/sculpting/editing/face_sets.html#bpy-ops-mesh-face-set-extract"),
("bpy.ops.mesh.faces_shade_flat*", "modeling/meshes/editing/face/shading.html#bpy-ops-mesh-faces-shade-flat"),
- ("bpy.ops.mesh.paint_mask_slice*", "sculpt_paint/sculpting/hide_mask.html#bpy-ops-mesh-paint-mask-slice"),
+ ("bpy.ops.mesh.paint_mask_slice*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-mesh-paint-mask-slice"),
("bpy.ops.mesh.select_ungrouped*", "modeling/meshes/selecting/all_by_trait.html#bpy-ops-mesh-select-ungrouped"),
("bpy.ops.object.duplicate_move*", "scene_layout/object/editing/duplicate.html#bpy-ops-object-duplicate-move"),
("bpy.ops.object.hook_add_selob*", "modeling/meshes/editing/vertex/hooks.html#bpy-ops-object-hook-add-selob"),
("bpy.ops.object.select_by_type*", "scene_layout/object/selecting.html#bpy-ops-object-select-by-type"),
("bpy.ops.object.select_grouped*", "scene_layout/object/selecting.html#bpy-ops-object-select-grouped"),
("bpy.ops.object.select_pattern*", "scene_layout/object/selecting.html#bpy-ops-object-select-pattern"),
- ("bpy.ops.outliner.id_operation*", "editors/outliner.html#bpy-ops-outliner-id-operation"),
- ("bpy.ops.paint.mask_flood_fill*", "sculpt_paint/sculpting/hide_mask.html#bpy-ops-paint-mask-flood-fill"),
+ ("bpy.ops.outliner.id_operation*", "editors/outliner/editing.html#bpy-ops-outliner-id-operation"),
+ ("bpy.ops.paint.mask_flood_fill*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-paint-mask-flood-fill"),
("bpy.ops.pose.quaternions_flip*", "animation/armatures/posing/editing/flip_quats.html#bpy-ops-pose-quaternions-flip"),
("bpy.ops.pose.transforms_clear*", "animation/armatures/posing/editing/clear.html#bpy-ops-pose-transforms-clear"),
("bpy.ops.preferences.copy_prev*", "editors/preferences/introduction.html#bpy-ops-preferences-copy-prev"),
("bpy.ops.preferences.keyconfig*", "editors/preferences/keymap.html#bpy-ops-preferences-keyconfig"),
("bpy.ops.screen.repeat_history*", "interface/undo_redo.html#bpy-ops-screen-repeat-history"),
- ("bpy.ops.sculpt.face_sets_init*", "sculpt_paint/sculpting/editing.html#bpy-ops-sculpt-face-sets-init"),
+ ("bpy.ops.sculpt.face_sets_init*", "sculpt_paint/sculpting/editing/face_sets.html#bpy-ops-sculpt-face-sets-init"),
("bpy.ops.sequencer.change_path*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-change-path"),
("bpy.ops.sequencer.refresh_all*", "video_editing/sequencer/navigating.html#bpy-ops-sequencer-refresh-all"),
("bpy.ops.sequencer.swap_inputs*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-swap-inputs"),
@@ -796,6 +861,7 @@ url_manual_mapping = (
("bpy.ops.transform.edge_crease*", "modeling/meshes/editing/edge/edge_data.html#bpy-ops-transform-edge-crease"),
("bpy.ops.transform.skin_resize*", "modeling/meshes/editing/mesh/transform/skin_resize.html#bpy-ops-transform-skin-resize"),
("bpy.ops.uv.seams_from_islands*", "modeling/meshes/uv/editing.html#bpy-ops-uv-seams-from-islands"),
+ ("bpy.types.brush.cloth_damping*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-cloth-damping"),
("bpy.types.brush.icon_filepath*", "sculpt_paint/brush/brush.html#bpy-types-brush-icon-filepath"),
("bpy.types.brush.smooth_stroke*", "grease_pencil/modes/draw/tool_settings/brushes/draw_brush.html#bpy-types-brush-smooth-stroke"),
("bpy.types.brush.tip_roundness*", "sculpt_paint/sculpting/tools/clay_strips.html#bpy-types-brush-tip-roundness"),
@@ -824,6 +890,7 @@ url_manual_mapping = (
("bpy.types.particledupliweight*", "physics/particles/emitter/vertex_groups.html#bpy-types-particledupliweight"),
("bpy.types.poseboneconstraints*", "animation/armatures/posing/bone_constraints/index.html#bpy-types-poseboneconstraints"),
("bpy.types.rigidbodyconstraint*", "physics/rigid_body/constraints/index.html#bpy-types-rigidbodyconstraint"),
+ ("bpy.types.rigifyarmaturelayer*", "addons/rigging/rigify/metarigs.html#bpy-types-rigifyarmaturelayer"),
("bpy.types.shadernodeaddshader*", "render/shader_nodes/shader/add.html#bpy-types-shadernodeaddshader"),
("bpy.types.shadernodeattribute*", "render/shader_nodes/input/attribute.html#bpy-types-shadernodeattribute"),
("bpy.types.shadernodeblackbody*", "render/shader_nodes/converter/blackbody.html#bpy-types-shadernodeblackbody"),
@@ -864,15 +931,16 @@ url_manual_mapping = (
("bpy.ops.mesh.vertices_smooth*", "modeling/meshes/editing/vertex/smooth_vertices.html#bpy-ops-mesh-vertices-smooth"),
("bpy.ops.nla.make_single_user*", "editors/nla/editing.html#bpy-ops-nla-make-single-user"),
("bpy.ops.node.read_viewlayers*", "interface/controls/nodes/editing.html#bpy-ops-node-read-viewlayers"),
- ("bpy.ops.object.data_transfer*", "scene_layout/object/editing/relations.html#bpy-ops-object-data-transfer"),
+ ("bpy.ops.object.data_transfer*", "scene_layout/object/editing/relations/transfer_mesh_data.html#bpy-ops-object-data-transfer"),
("bpy.ops.object.select_camera*", "scene_layout/object/selecting.html#bpy-ops-object-select-camera"),
("bpy.ops.object.select_linked*", "scene_layout/object/selecting.html#bpy-ops-object-select-linked"),
("bpy.ops.object.select_mirror*", "scene_layout/object/selecting.html#bpy-ops-object-select-mirror"),
("bpy.ops.object.select_random*", "scene_layout/object/selecting.html#bpy-ops-object-select-random"),
("bpy.ops.paint.add_simple_uvs*", "sculpt_paint/texture_paint/tool_settings/texture_slots.html#bpy-ops-paint-add-simple-uvs"),
+ ("bpy.ops.pose.rigify_generate*", "addons/rigging/rigify/basics.html#bpy-ops-pose-rigify-generate"),
("bpy.ops.preferences.autoexec*", "editors/preferences/save_load.html#bpy-ops-preferences-autoexec"),
("bpy.ops.scene.view_layer_add*", "render/layers/layers.html#bpy-ops-scene-view-layer-add"),
- ("bpy.ops.sculpt.face_set_edit*", "sculpt_paint/sculpting/editing.html#bpy-ops-sculpt-face-set-edit"),
+ ("bpy.ops.sculpt.face_set_edit*", "sculpt_paint/sculpting/editing/face_sets.html#bpy-ops-sculpt-face-set-edit"),
("bpy.ops.sequencer.gap_insert*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-gap-insert"),
("bpy.ops.sequencer.gap_remove*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-gap-remove"),
("bpy.ops.sequencer.rendersize*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-rendersize"),
@@ -885,7 +953,7 @@ url_manual_mapping = (
("bpy.types.alphaundersequence*", "video_editing/sequencer/strips/effects/alpha_over_under_overdrop.html#bpy-types-alphaundersequence"),
("bpy.types.armatureconstraint*", "animation/constraints/relationship/armature.html#bpy-types-armatureconstraint"),
("bpy.types.compositornodeblur*", "compositing/types/filter/blur_node.html#bpy-types-compositornodeblur"),
- ("bpy.types.compositornodecomb*", "editors/texture_node/types/color/combine_separate.html#bpy-types-compositornodecomb"),
+ ("bpy.types.compositornodecomb*", "compositing/types/converter/combine_separate.html#bpy-types-compositornodecomb"),
("bpy.types.compositornodecrop*", "compositing/types/distort/crop.html#bpy-types-compositornodecrop"),
("bpy.types.compositornodeflip*", "compositing/types/distort/flip.html#bpy-types-compositornodeflip"),
("bpy.types.compositornodemask*", "compositing/types/input/mask.html#bpy-types-compositornodemask"),
@@ -908,9 +976,11 @@ url_manual_mapping = (
("bpy.types.nodeoutputfileslot*", "compositing/types/output/file.html#bpy-types-nodeoutputfileslot"),
("bpy.types.normaleditmodifier*", "modeling/modifiers/modify/normal_edit.html#bpy-types-normaleditmodifier"),
("bpy.types.object.empty_image*", "modeling/empties.html#bpy-types-object-empty-image"),
- ("bpy.types.object.hide_render*", "editors/outliner.html#bpy-types-object-hide-render"),
+ ("bpy.types.object.hide_render*", "scene_layout/object/properties/visibility.html#bpy-types-object-hide-render"),
+ ("bpy.types.object.hide_select*", "scene_layout/object/properties/visibility.html#bpy-types-object-hide-select"),
("bpy.types.object.show_bounds*", "scene_layout/object/properties/display.html#bpy-types-object-show-bounds"),
("bpy.types.scene.audio_volume*", "scene_layout/scene/properties.html#bpy-types-scene-audio-volume"),
+ ("bpy.types.sculpt.detail_size*", "sculpt_paint/sculpting/tool_settings/dyntopo.html#bpy-types-sculpt-detail-size"),
("bpy.types.shadernodebsdfhair*", "render/shader_nodes/shader/hair.html#bpy-types-shadernodebsdfhair"),
("bpy.types.shadernodebsdftoon*", "render/shader_nodes/shader/toon.html#bpy-types-shadernodebsdftoon"),
("bpy.types.shadernodeemission*", "render/shader_nodes/shader/emission.html#bpy-types-shadernodeemission"),
@@ -972,6 +1042,7 @@ url_manual_mapping = (
("bpy.ops.transform.translate*", "scene_layout/object/editing/transform/move.html#bpy-ops-transform-translate"),
("bpy.ops.uv.cylinder_project*", "modeling/meshes/editing/uv.html#bpy-ops-uv-cylinder-project"),
("bpy.ops.uv.minimize_stretch*", "modeling/meshes/uv/editing.html#bpy-ops-uv-minimize-stretch"),
+ ("bpy.ops.uv.select_edge_ring*", "editors/uv/selecting.html#bpy-ops-uv-select-edge-ring"),
("bpy.types.alphaoversequence*", "video_editing/sequencer/strips/effects/alpha_over_under_overdrop.html#bpy-types-alphaoversequence"),
("bpy.types.armatureeditbones*", "animation/armatures/bones/editing/index.html#bpy-types-armatureeditbones"),
("bpy.types.brush.pose_offset*", "sculpt_paint/sculpting/tools/pose.html#bpy-types-brush-pose-offset"),
@@ -982,7 +1053,7 @@ url_manual_mapping = (
("bpy.types.collisionmodifier*", "physics/collision.html#bpy-types-collisionmodifier"),
("bpy.types.collisionsettings*", "physics/collision.html#bpy-types-collisionsettings"),
("bpy.types.compositornodergb*", "compositing/types/input/rgb.html#bpy-types-compositornodergb"),
- ("bpy.types.compositornodesep*", "editors/texture_node/types/color/combine_separate.html#bpy-types-compositornodesep"),
+ ("bpy.types.compositornodesep*", "compositing/types/converter/combine_separate.html#bpy-types-compositornodesep"),
("bpy.types.curve.bevel_depth*", "modeling/curves/properties/geometry.html#bpy-types-curve-bevel-depth"),
("bpy.types.curve.use_stretch*", "modeling/curves/properties/shape.html#bpy-types-curve-use-stretch"),
("bpy.types.edgesplitmodifier*", "modeling/modifiers/generate/edge_split.html#bpy-types-edgesplitmodifier"),
@@ -1026,6 +1097,7 @@ url_manual_mapping = (
("bpy.ops.curve.extrude_move*", "modeling/curves/editing/control_points.html#bpy-ops-curve-extrude-move"),
("bpy.ops.curve.make_segment*", "modeling/curves/editing/control_points.html#bpy-ops-curve-make-segment"),
("bpy.ops.graph.euler_filter*", "editors/graph_editor/fcurves/editing.html#bpy-ops-graph-euler-filter"),
+ ("bpy.ops.marker.camera_bind*", "animation/markers.html#bpy-ops-marker-camera-bind"),
("bpy.ops.mesh.beautify_fill*", "modeling/meshes/editing/face/beautify_faces.html#bpy-ops-mesh-beautify-fill"),
("bpy.ops.mesh.colors_rotate*", "modeling/meshes/editing/face/face_data.html#bpy-ops-mesh-colors-rotate"),
("bpy.ops.mesh.edge_collapse*", "modeling/meshes/editing/mesh/delete.html#bpy-ops-mesh-edge-collapse"),
@@ -1049,16 +1121,16 @@ url_manual_mapping = (
("bpy.ops.object.track_clear*", "animation/constraints/interface/adding_removing.html#bpy-ops-object-track-clear"),
("bpy.ops.poselib.apply_pose*", "animation/armatures/properties/pose_library.html#bpy-ops-poselib-apply-pose"),
("bpy.ops.screen.repeat_last*", "interface/undo_redo.html#bpy-ops-screen-repeat-last"),
- ("bpy.ops.sculpt.mask_expand*", "sculpt_paint/sculpting/hide_mask.html#bpy-ops-sculpt-mask-expand"),
- ("bpy.ops.sculpt.mask_filter*", "sculpt_paint/sculpting/hide_mask.html#bpy-ops-sculpt-mask-filter"),
+ ("bpy.ops.sculpt.mask_expand*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-sculpt-mask-expand"),
+ ("bpy.ops.sculpt.mask_filter*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-sculpt-mask-filter"),
("bpy.ops.transform.tosphere*", "modeling/meshes/editing/mesh/transform/to_sphere.html#bpy-ops-transform-tosphere"),
("bpy.ops.view3d.clip_border*", "editors/3dview/navigate/regions.html#bpy-ops-view3d-clip-border"),
("bpy.ops.wm.previews_ensure*", "files/blend/previews.html#bpy-ops-wm-previews-ensure"),
("bpy.ops.wm.search_operator*", "interface/controls/templates/operator_search.html#bpy-ops-wm-search-operator"),
- ("bpy.opsuv.select_edge_ring*", "editors/uv/selecting.html#bpy-opsuv-select-edge-ring"),
("bpy.types.actionconstraint*", "animation/constraints/relationship/action.html#bpy-types-actionconstraint"),
("bpy.types.addonpreferences*", "editors/preferences/addons.html#bpy-types-addonpreferences"),
("bpy.types.armaturemodifier*", "modeling/modifiers/deform/armature.html#bpy-types-armaturemodifier"),
+ ("bpy.types.brush.cloth_mass*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-cloth-mass"),
("bpy.types.colormixsequence*", "video_editing/sequencer/strips/effects/color_mix.html#bpy-types-colormixsequence"),
("bpy.types.curve.dimensions*", "modeling/curves/properties/shape.html#bpy-types-curve-dimensions"),
("bpy.types.curve.twist_mode*", "modeling/curves/properties/shape.html#bpy-types-curve-twist-mode"),
@@ -1072,15 +1144,15 @@ url_manual_mapping = (
("bpy.types.multicamsequence*", "video_editing/sequencer/strips/effects/multicam.html#bpy-types-multicamsequence"),
("bpy.types.multiplysequence*", "video_editing/sequencer/strips/effects/multiply.html#bpy-types-multiplysequence"),
("bpy.types.multiresmodifier*", "modeling/modifiers/generate/multiresolution.html#bpy-types-multiresmodifier"),
- ("bpy.types.object.use_extra*", "scene_layout/object/properties/relations.html#bpy-types-object-use-extra"),
("bpy.types.overdropsequence*", "video_editing/sequencer/strips/effects/alpha_over_under_overdrop.html#bpy-types-overdropsequence"),
("bpy.types.paint.show_brush*", "sculpt_paint/brush/cursor.html#bpy-types-paint-show-brush"),
("bpy.types.paint.use_cavity*", "sculpt_paint/texture_paint/tool_settings/mask.html#bpy-types-paint-use-cavity"),
("bpy.types.particlesettings*", "physics/particles/index.html#bpy-types-particlesettings"),
("bpy.types.pose.use_auto_ik*", "animation/armatures/posing/tool_settings.html#bpy-types-pose-use-auto-ik"),
("bpy.types.preferencesinput*", "editors/preferences/input.html#bpy-types-preferencesinput"),
+ ("bpy.types.rigifyparameters*", "addons/rigging/rigify/rig_types/index.html#bpy-types-rigifyparameters"),
("bpy.types.sceneeevee.bloom*", "render/eevee/render_settings/bloom.html#bpy-types-sceneeevee-bloom"),
- ("bpy.types.sculpt.show_mask*", "sculpt_paint/sculpting/hide_mask.html#bpy-types-sculpt-show-mask"),
+ ("bpy.types.sculpt.show_mask*", "sculpt_paint/sculpting/editing/mask.html#bpy-types-sculpt-show-mask"),
("bpy.types.sequencemodifier*", "video_editing/sequencer/properties/modifiers.html#bpy-types-sequencemodifier"),
("bpy.types.shaderfxcolorize*", "grease_pencil/visual_effects/colorize.html#bpy-types-shaderfxcolorize"),
("bpy.types.shaderfxpixelate*", "grease_pencil/visual_effects/pixelate.html#bpy-types-shaderfxpixelate"),
@@ -1095,7 +1167,7 @@ url_manual_mapping = (
("bpy.types.solidifymodifier*", "modeling/modifiers/generate/solidify.html#bpy-types-solidifymodifier"),
("bpy.types.spacegrapheditor*", "editors/graph_editor/index.html#bpy-types-spacegrapheditor"),
("bpy.types.spacepreferences*", "editors/preferences/index.html#bpy-types-spacepreferences"),
- ("bpy.types.spaceview3d.lock*", "editors/3dview/properties/sidebar.html#bpy-types-spaceview3d-lock"),
+ ("bpy.types.spaceview3d.lock*", "editors/3dview/sidebar.html#bpy-types-spaceview3d-lock"),
("bpy.types.spaceview3d.show*", "editors/3dview/display/index.html#bpy-types-spaceview3d-show"),
("bpy.types.subtractsequence*", "video_editing/sequencer/strips/effects/subtract.html#bpy-types-subtractsequence"),
("bpy.types.text.indentation*", "editors/text_editor.html#bpy-types-text-indentation"),
@@ -1119,9 +1191,10 @@ url_manual_mapping = (
("bpy.ops.nla.tracks_delete*", "editors/nla/editing.html#bpy-ops-nla-tracks-delete"),
("bpy.ops.object.lightprobe*", "render/eevee/light_probes/index.html#bpy-ops-object-lightprobe"),
("bpy.ops.object.make_links*", "scene_layout/object/editing/make_links.html#bpy-ops-object-make-links"),
- ("bpy.ops.object.make_local*", "files/linked_libraries/introduction.html#bpy-ops-object-make-local"),
+ ("bpy.ops.object.make_local*", "files/linked_libraries/link_append.html#bpy-ops-object-make-local"),
("bpy.ops.object.origin_set*", "scene_layout/object/origin.html#bpy-ops-object-origin-set"),
("bpy.ops.object.parent_set*", "scene_layout/object/editing/parent.html#bpy-ops-object-parent-set"),
+ ("bpy.ops.object.pointcloud*", "modeling/point_cloud.html#bpy-ops-object-pointcloud"),
("bpy.ops.object.proxy_make*", "files/linked_libraries/library_proxies.html#bpy-ops-object-proxy-make"),
("bpy.ops.object.select_all*", "scene_layout/object/selecting.html#bpy-ops-object-select-all"),
("bpy.ops.object.shade_flat*", "scene_layout/object/editing/shading.html#bpy-ops-object-shade-flat"),
@@ -1129,12 +1202,14 @@ url_manual_mapping = (
("bpy.ops.preferences.addon*", "editors/preferences/addons.html#bpy-ops-preferences-addon"),
("bpy.ops.scene.light_cache*", "render/eevee/render_settings/indirect_lighting.html#bpy-ops-scene-light-cache"),
("bpy.ops.screen.area_dupli*", "interface/window_system/areas.html#bpy-ops-screen-area-dupli"),
- ("bpy.ops.sculpt.dirty_mask*", "sculpt_paint/sculpting/hide_mask.html#bpy-ops-sculpt-dirty-mask"),
+ ("bpy.ops.sculpt.dirty_mask*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-sculpt-dirty-mask"),
("bpy.ops.sculpt.symmetrize*", "sculpt_paint/sculpting/tool_settings/symmetry.html#bpy-ops-sculpt-symmetrize"),
("bpy.ops.uv.remove_doubles*", "modeling/meshes/uv/editing.html#bpy-ops-uv-remove-doubles"),
("bpy.ops.uv.sphere_project*", "modeling/meshes/editing/uv.html#bpy-ops-uv-sphere-project"),
+ ("bpy.ops.view3d.view_orbit*", "editors/3dview/navigate/navigation.html#bpy-ops-view3d-view-orbit"),
("bpy.ops.wm.previews_clear*", "files/blend/previews.html#bpy-ops-wm-previews-clear"),
("bpy.types.armature.layers*", "animation/armatures/properties/skeleton.html#bpy-types-armature-layers"),
+ ("bpy.types.armature.rigify*", "addons/rigging/rigify/basics.html#bpy-types-armature-rigify"),
("bpy.types.booleanmodifier*", "modeling/modifiers/generate/booleans.html#bpy-types-booleanmodifier"),
("bpy.types.brush.mask_tool*", "sculpt_paint/sculpting/tools/mask.html#bpy-types-brush-mask-tool"),
("bpy.types.constraint.mute*", "animation/constraints/interface/header.html#bpy-types-constraint-mute"),
@@ -1251,12 +1326,13 @@ url_manual_mapping = (
("bpy.ops.object.face_map*", "modeling/meshes/properties/object_data.html#bpy-ops-object-face-map"),
("bpy.ops.pose.relax_rest*", "animation/armatures/posing/editing/in_betweens.html#bpy-ops-pose-relax-rest"),
("bpy.ops.rigidbody.world*", "physics/rigid_body/world.html#bpy-ops-rigidbody-world"),
- ("bpy.ops.sculpt.optimize*", "sculpt_paint/sculpting/editing.html#bpy-ops-sculpt-optimize"),
+ ("bpy.ops.sculpt.optimize*", "sculpt_paint/sculpting/editing/sculpt.html#bpy-ops-sculpt-optimize"),
("bpy.ops.sequencer.split*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-split"),
("bpy.ops.transform.shear*", "modeling/meshes/editing/mesh/transform/shear.html#bpy-ops-transform-shear"),
("bpy.ops.uv.cube_project*", "modeling/meshes/editing/uv.html#bpy-ops-uv-cube-project"),
("bpy.ops.uv.pack_islands*", "modeling/meshes/uv/editing.html#bpy-ops-uv-pack-islands"),
("bpy.ops.uv.select_split*", "modeling/meshes/uv/editing.html#bpy-ops-uv-select-split"),
+ ("bpy.ops.view3d.view_pan*", "editors/3dview/navigate/navigation.html#bpy-ops-view3d-view-pan"),
("bpy.ops.wm.app_template*", "advanced/app_templates.html#bpy-ops-wm-app-template"),
("bpy.ops.wm.batch_rename*", "files/blend/rename.html#bpy-ops-wm-batch-rename"),
("bpy.ops.wm.redraw_timer*", "advanced/operators.html#bpy-ops-wm-redraw-timer"),
@@ -1292,7 +1368,7 @@ url_manual_mapping = (
("bpy.types.shaderfxswirl*", "grease_pencil/visual_effects/swirl.html#bpy-types-shaderfxswirl"),
("bpy.types.shadernodergb*", "render/shader_nodes/input/rgb.html#bpy-types-shadernodergb"),
("bpy.types.soundsequence*", "video_editing/sequencer/strips/sound.html#bpy-types-soundsequence"),
- ("bpy.types.spaceoutliner*", "editors/outliner.html#bpy-types-spaceoutliner"),
+ ("bpy.types.spaceoutliner*", "editors/outliner/index.html#bpy-types-spaceoutliner"),
("bpy.types.spacetimeline*", "editors/timeline.html#bpy-types-spacetimeline"),
("bpy.types.spaceuveditor*", "editors/uv/index.html#bpy-types-spaceuveditor"),
("bpy.types.stuccitexture*", "render/materials/legacy_textures/types/stucci.html#bpy-types-stuccitexture"),
@@ -1382,7 +1458,9 @@ url_manual_mapping = (
("bpy.ops.view3d.select*", "editors/3dview/selecting.html#bpy-ops-view3d-select"),
("bpy.ops.wm.debug_menu*", "advanced/operators.html#bpy-ops-wm-debug-menu"),
("bpy.ops.wm.properties*", "files/data_blocks.html#bpy-ops-wm-properties"),
+ ("bpy.ops.wm.usd_export*", "files/import_export/usd.html#bpy-ops-wm-usd-export"),
("bpy.types.addsequence*", "video_editing/sequencer/strips/effects/add.html#bpy-types-addsequence"),
+ ("bpy.types.brush.cloth*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-cloth"),
("bpy.types.camera.show*", "render/cameras.html#bpy-types-camera-show"),
("bpy.types.consoleline*", "editors/python_console.html#bpy-types-consoleline"),
("bpy.types.curve.bevel*", "modeling/curves/properties/geometry.html#bpy-types-curve-bevel"),
@@ -1395,6 +1473,7 @@ url_manual_mapping = (
("bpy.types.posebone.ik*", "animation/armatures/posing/bone_constraints/inverse_kinematics/introduction.html#bpy-types-posebone-ik"),
("bpy.types.preferences*", "editors/preferences/index.html#bpy-types-preferences"),
("bpy.types.renderlayer*", "render/layers/passes.html#bpy-types-renderlayer"),
+ ("bpy.types.sculpt.lock*", "sculpt_paint/sculpting/tool_settings/symmetry.html#bpy-types-sculpt-lock"),
("bpy.types.shaderfxrim*", "grease_pencil/visual_effects/rim.html#bpy-types-shaderfxrim"),
("bpy.types.spaceview3d*", "editors/3dview/index.html#bpy-types-spaceview3d"),
("bpy.types.uipopupmenu*", "interface/controls/buttons/menus.html#bpy-types-uipopupmenu"),
@@ -1443,6 +1522,7 @@ url_manual_mapping = (
("bpy.ops.preferences*", "editors/preferences/index.html#bpy-ops-preferences"),
("bpy.ops.uv.rip_move*", "modeling/meshes/uv/tools/rip.html#bpy-ops-uv-rip-move"),
("bpy.ops.view3d.snap*", "scene_layout/object/editing/snap.html#bpy-ops-view3d-snap"),
+ ("bpy.ops.view3d.zoom*", "editors/3dview/navigate/navigation.html#bpy-ops-view3d-zoom"),
("bpy.types.*texspace*", "modeling/meshes/uv/uv_texture_spaces.html#bpy-types-texspace"),
("bpy.types.arealight*", "render/lights/light_object.html#bpy-types-arealight"),
("bpy.types.blenddata*", "files/data_blocks.html#bpy-types-blenddata"),
@@ -1476,7 +1556,7 @@ url_manual_mapping = (
("bpy.ops.mesh.screw*", "modeling/meshes/editing/edge/screw.html#bpy-ops-mesh-screw"),
("bpy.ops.mesh.split*", "modeling/meshes/editing/mesh/split.html#bpy-ops-mesh-split"),
("bpy.ops.nla.delete*", "editors/nla/editing.html#bpy-ops-nla-delete"),
- ("bpy.ops.paint.mask*", "sculpt_paint/sculpting/hide_mask.html#bpy-ops-paint-mask"),
+ ("bpy.ops.paint.mask*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-paint-mask"),
("bpy.ops.pose.paste*", "animation/armatures/posing/editing/copy_paste.html#bpy-ops-pose-paste"),
("bpy.ops.pose.relax*", "animation/armatures/posing/editing/in_betweens.html#bpy-ops-pose-relax"),
("bpy.ops.safe_areas*", "render/cameras.html#bpy-ops-safe-areas"),
@@ -1510,6 +1590,7 @@ url_manual_mapping = (
("bpy.ops.uv.select*", "editors/uv/selecting.html#bpy-ops-uv-select"),
("bpy.ops.uv.stitch*", "modeling/meshes/uv/editing.html#bpy-ops-uv-stitch"),
("bpy.ops.uv.unwrap*", "modeling/meshes/editing/uv.html#bpy-ops-uv-unwrap"),
+ ("bpy.ops.wm.append*", "files/linked_libraries/link_append.html#bpy-ops-wm-append"),
("bpy.ops.wm.search*", "interface/controls/templates/operator_search.html#bpy-ops-wm-search"),
("bpy.types.animviz*", "animation/motion_paths.html#bpy-types-animviz"),
("bpy.types.lattice*", "animation/lattice.html#bpy-types-lattice"),
@@ -1521,7 +1602,7 @@ url_manual_mapping = (
("bpy.ops.nla.bake*", "animation/actions.html#bpy-ops-nla-bake"),
("bpy.ops.nla.snap*", "editors/nla/editing.html#bpy-ops-nla-snap"),
("bpy.ops.nla.swap*", "editors/nla/editing.html#bpy-ops-nla-swap"),
- ("bpy.ops.outliner*", "editors/outliner.html#bpy-ops-outliner"),
+ ("bpy.ops.outliner*", "editors/outliner/index.html#bpy-ops-outliner"),
("bpy.ops.particle*", "physics/particles/index.html#bpy-ops-particle"),
("bpy.ops.uv.align*", "modeling/meshes/uv/editing.html#bpy-ops-uv-align"),
("bpy.ops.uv.reset*", "modeling/meshes/editing/uv.html#bpy-ops-uv-reset"),
@@ -1551,6 +1632,7 @@ url_manual_mapping = (
("bpy.ops.surface*", "modeling/surfaces/index.html#bpy-ops-surface"),
("bpy.ops.texture*", "render/materials/legacy_textures/index.html#bpy-ops-texture"),
("bpy.ops.uv.weld*", "modeling/meshes/uv/editing.html#bpy-ops-uv-weld"),
+ ("bpy.ops.wm.link*", "files/linked_libraries/link_append.html#bpy-ops-wm-link"),
("bpy.ops.wm.tool*", "interface/tool_system.html#bpy-ops-wm-tool"),
("bpy.types.addon*", "editors/preferences/addons.html#bpy-types-addon"),
("bpy.types.brush*", "sculpt_paint/brush/brush.html#bpy-types-brush"),
diff --git a/release/scripts/modules/rna_prop_ui.py b/release/scripts/modules/rna_prop_ui.py
index 98722ea322b..8fdd66dff9f 100644
--- a/release/scripts/modules/rna_prop_ui.py
+++ b/release/scripts/modules/rna_prop_ui.py
@@ -282,10 +282,10 @@ def draw(layout, context, context_member, property_type, use_edit=True):
if use_edit:
split = box.split(factor=0.75)
- row = split.row(align=True)
+ row = split.row()
else:
split = box.split(factor=1.00)
- row = split.row(align=True)
+ row = split.row()
row.alignment = 'RIGHT'
diff --git a/release/scripts/modules/sys_info.py b/release/scripts/modules/sys_info.py
index fc3ffe4dd88..cb80529f0f3 100644
--- a/release/scripts/modules/sys_info.py
+++ b/release/scripts/modules/sys_info.py
@@ -82,10 +82,10 @@ def write_sysinfo(filepath):
output.write("\t%r\n" % p)
output.write(title("Python (External Binary)"))
- output.write("binary path: %s\n" % prepr(bpy.app.binary_path_python))
+ output.write("binary path: %s\n" % prepr(sys.executable))
try:
py_ver = prepr(subprocess.check_output([
- bpy.app.binary_path_python,
+ sys.executable,
"--version",
]).strip())
except Exception as e:
diff --git a/release/scripts/presets/gpencil_material/fill_only.py b/release/scripts/presets/gpencil_material/fill_only.py
index 57d5dc3b860..aa4d58a8c10 100644
--- a/release/scripts/presets/gpencil_material/fill_only.py
+++ b/release/scripts/presets/gpencil_material/fill_only.py
@@ -19,7 +19,6 @@ gpcolor.flip = False
gpcolor.texture_offset = (0.0, 0.0)
gpcolor.texture_scale = (1.0, 1.0)
gpcolor.texture_angle = 0.0
-gpcolor.texture_opacity = 1.0
gpcolor.texture_clamp = False
gpcolor.mix_factor = 0.0
gpcolor.show_stroke = False
diff --git a/release/scripts/presets/gpencil_material/stroke_and_fill.py b/release/scripts/presets/gpencil_material/stroke_and_fill.py
index eff728a7857..3572036de5e 100644
--- a/release/scripts/presets/gpencil_material/stroke_and_fill.py
+++ b/release/scripts/presets/gpencil_material/stroke_and_fill.py
@@ -19,7 +19,6 @@ gpcolor.flip = False
gpcolor.texture_offset = (0.0, 0.0)
gpcolor.texture_scale = (1.0, 1.0)
gpcolor.texture_angle = 0.0
-gpcolor.texture_opacity = 1.0
gpcolor.texture_clamp = False
gpcolor.mix_factor = 0.0
gpcolor.show_stroke = True
diff --git a/release/scripts/presets/gpencil_material/stroke_only.py b/release/scripts/presets/gpencil_material/stroke_only.py
index 1724a62bffc..4e02b108e01 100644
--- a/release/scripts/presets/gpencil_material/stroke_only.py
+++ b/release/scripts/presets/gpencil_material/stroke_only.py
@@ -19,7 +19,6 @@ gpcolor.flip = False
gpcolor.texture_offset = (0.0, 0.0)
gpcolor.texture_scale = (1.0, 1.0)
gpcolor.texture_angle = 0.0
-gpcolor.texture_opacity = 1.0
gpcolor.texture_clamp = False
gpcolor.mix_factor = 0.0
gpcolor.show_stroke = True
diff --git a/release/scripts/presets/interface_theme/blender_light.xml b/release/scripts/presets/interface_theme/blender_light.xml
index 1b48377f62c..a5671ee0fbe 100644
--- a/release/scripts/presets/interface_theme/blender_light.xml
+++ b/release/scripts/presets/interface_theme/blender_light.xml
@@ -6,9 +6,12 @@
menu_shadow_width="4"
icon_alpha="1"
icon_saturation="0.5"
- widget_emboss="#00000005"
+ widget_emboss="#00000026"
editor_outline="#1f1f1f"
widget_text_cursor="#3399e6"
+ transparent_checker_primary="#333333"
+ transparent_checker_secondary="#262626"
+ transparent_checker_size="8"
axis_x="#ff3352"
axis_y="#8bdc00"
axis_z="#2890ff"
@@ -62,7 +65,7 @@
outline="#363636"
inner="#434343ff"
inner_sel="#5680c2ff"
- item="#ffffff8f"
+ item="#e6e6e6cc"
text="#e6e6e6"
text_sel="#ffffff"
show_shaded="FALSE"
@@ -74,7 +77,7 @@
</wcol_toolbar_item>
<wcol_radio>
<ThemeWidgetColors
- outline="#3b3b3b"
+ outline="#434343"
inner="#3b3b3bff"
inner_sel="#5680c2e6"
item="#ffffffff"
@@ -182,7 +185,7 @@
outline="#3b3b3b"
inner="#3b3b3bff"
inner_sel="#767676ff"
- item="#e6e6e6ff"
+ item="#808080ff"
text="#d9d9d9"
text_sel="#ffffff"
show_shaded="FALSE"
@@ -330,7 +333,7 @@
</wcol_state>
<wcol_tab>
<ThemeWidgetColors
- outline="#808080"
+ outline="#656565"
inner="#818181ff"
inner_sel="#b3b3b3ff"
item="#28292dff"
@@ -364,6 +367,7 @@
speaker="#000000"
vertex="#000000"
vertex_select="#ff8500"
+ vertex_active="#000000"
vertex_size="3"
vertex_bevel="#00a5ff"
vertex_unreferenced="#000000"
@@ -473,6 +477,7 @@
preview_range="#a14d0066"
vertex="#000000"
vertex_select="#ff8500"
+ vertex_active="#ffffff"
vertex_size="6"
vertex_bevel="#000000"
vertex_unreferenced="#000000"
@@ -534,8 +539,8 @@
</graph_editor>
<file_browser>
<ThemeFileBrowser
- row_alternate="#ffffff0f"
selected_file="#5680c2"
+ row_alternate="#ffffff0f"
>
<space>
<ThemeSpaceGeneric
@@ -713,8 +718,10 @@
</dopesheet_editor>
<image_editor>
<ThemeImageEditor
+ grid="#353535ff"
vertex="#000000"
vertex_select="#ff8500"
+ vertex_active="#000000"
vertex_size="3"
vertex_bevel="#000000"
vertex_unreferenced="#000000"
@@ -845,7 +852,9 @@
</ThemeSequenceEditor>
</sequence_editor>
<properties>
- <ThemeProperties>
+ <ThemeProperties
+ match="#5680c2"
+ >
<space>
<ThemeSpaceGeneric
back="#b3b3b3"
@@ -927,6 +936,7 @@
</text_editor>
<node_editor>
<ThemeNodeEditor
+ grid="#353535"
node_selected="#f15800"
node_active="#f15800"
wire="#a7a7a7"
@@ -1162,6 +1172,7 @@
</console>
<clip_editor>
<ThemeClipEditor
+ grid="#393939ff"
marker_outline="#000000"
marker="#7f7f00"
active_marker="#ffffff"
diff --git a/release/scripts/presets/keyconfig/blender.py b/release/scripts/presets/keyconfig/blender.py
index cbdd01b3cbe..d24735ba8b7 100644
--- a/release/scripts/presets/keyconfig/blender.py
+++ b/release/scripts/presets/keyconfig/blender.py
@@ -121,14 +121,16 @@ class Prefs(bpy.types.KeyConfigPreferences):
name="MMB Action",
items=(
('ORBIT', "Orbit",
- "Orbit",
+ "",
0),
('PAN', "Pan",
- "Set the view axis where each mouse direction always maps to the same axis",
+ "",
1),
),
description=(
- "The action when Middle-Mouse dragging in the viewport. Shift-Middle-Mouse is used for the other action"
+ "The action when Middle-Mouse dragging in the viewport. "
+ "Shift-Middle-Mouse is used for the other action. "
+ "This applies to Track-Pad as well"
),
update=update_fn,
)
diff --git a/release/scripts/presets/keyconfig/blender_27x.py b/release/scripts/presets/keyconfig/blender_27x.py
index 8d50d449494..a02ac895efb 100644
--- a/release/scripts/presets/keyconfig/blender_27x.py
+++ b/release/scripts/presets/keyconfig/blender_27x.py
@@ -7,6 +7,7 @@ from bpy.props import (
DIRNAME, FILENAME = os.path.split(__file__)
IDNAME = os.path.splitext(FILENAME)[0]
+
def update_fn(_self, _context):
load()
@@ -41,6 +42,7 @@ class Prefs(bpy.types.KeyConfigPreferences):
blender_default = bpy.utils.execfile(os.path.join(DIRNAME, "keymap_data", "blender_default.py"))
+
def load():
from sys import platform
from bpy import context
@@ -68,7 +70,6 @@ def load():
from bl_keymap_utils.platform_helpers import keyconfig_data_oskey_from_ctrl_for_macos
keyconfig_data = keyconfig_data_oskey_from_ctrl_for_macos(keyconfig_data)
-
keyconfig_init_from_data(kc, keyconfig_data)
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 2b0bacc1c3f..174ab6fd28b 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -269,6 +269,7 @@ def _template_items_editmode_mesh_select_mode(params):
for k, e in (('ONE', 'VERT'), ('TWO', 'EDGE'), ('THREE', 'FACE'))
]
+
def _template_items_uv_select_mode(params):
if params.legacy:
return [
@@ -288,6 +289,7 @@ def _template_items_uv_select_mode(params):
{"properties": [("data_path", 'tool_settings.uv_select_mode'), ("value", 'ISLAND')]}),
]
+
def _template_items_proportional_editing(*, connected=False):
return [
op_menu_pie("VIEW3D_MT_proportional_editing_falloff_pie", {"type": 'O', "value": 'PRESS', "shift": True}),
@@ -504,14 +506,14 @@ def km_screen(params):
# Quad view
("screen.region_quadview", {"type": 'Q', "value": 'PRESS', "ctrl": True, "alt": True}, None),
# Repeat last
- ("screen.repeat_last", {"type": 'R', "value": 'PRESS', "shift": True}, None),
+ ("screen.repeat_last", {"type": 'R', "value": 'PRESS', "shift": True, "repeat": True}, None),
# Files
("file.execute", {"type": 'RET', "value": 'PRESS'}, None),
("file.execute", {"type": 'NUMPAD_ENTER', "value": 'PRESS'}, None),
("file.cancel", {"type": 'ESC', "value": 'PRESS'}, None),
# Undo
- ("ed.undo", {"type": 'Z', "value": 'PRESS', "ctrl": True}, None),
- ("ed.redo", {"type": 'Z', "value": 'PRESS', "shift": True, "ctrl": True}, None),
+ ("ed.undo", {"type": 'Z', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("ed.redo", {"type": 'Z', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, None),
# Render
("render.render", {"type": 'F12', "value": 'PRESS'},
{"properties": [("use_viewport", True)]}),
@@ -631,8 +633,8 @@ def km_view2d(_params):
# Zoom with single step
("view2d.zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS'}, None),
("view2d.zoom_in", {"type": 'WHEELINMOUSE', "value": 'PRESS'}, None),
- ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None),
- ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None),
+ ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None),
+ ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None),
("view2d.zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None),
("view2d.smoothview", {"type": 'TIMER1', "value": 'ANY', "any": True}, None),
# Scroll up/down, only when zoom is not available.
@@ -666,16 +668,16 @@ def km_view2d_buttons_list(_params):
("view2d.pan", {"type": 'TRACKPADPAN', "value": 'ANY'}, None),
("view2d.scroll_down", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, None),
("view2d.scroll_up", {"type": 'WHEELUPMOUSE', "value": 'PRESS'}, None),
- ("view2d.scroll_down", {"type": 'PAGE_DOWN', "value": 'PRESS'},
+ ("view2d.scroll_down", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True},
{"properties": [("page", True)]}),
- ("view2d.scroll_up", {"type": 'PAGE_UP', "value": 'PRESS'},
+ ("view2d.scroll_up", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
{"properties": [("page", True)]}),
# Zoom
("view2d.zoom", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "ctrl": True}, None),
("view2d.zoom", {"type": 'TRACKPADZOOM', "value": 'ANY'}, None),
("view2d.zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None),
- ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None),
- ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None),
+ ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None),
+ ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None),
("view2d.reset", {"type": 'HOME', "value": 'PRESS'}, None),
])
@@ -713,6 +715,7 @@ def km_user_interface(_params):
("anim.driver_button_remove", {"type": 'D', "value": 'PRESS', "ctrl": True, "alt": True}, None),
("anim.keyingset_button_add", {"type": 'K', "value": 'PRESS'}, None),
("anim.keyingset_button_remove", {"type": 'K', "value": 'PRESS', "alt": True}, None),
+ ("ui.reset_default_button", {"type": 'BACK_SPACE', "value": 'PRESS'}, {"properties": [("all", True)]}),
])
return keymap
@@ -733,9 +736,11 @@ def km_property_editor(_params):
items.extend([
("buttons.context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, None),
("screen.space_context_cycle", {"type": 'WHEELUPMOUSE', "value": 'PRESS', "ctrl": True},
- {"properties": [("direction", 'PREV'), ], },),
+ {"properties": [("direction", 'PREV')]}),
("screen.space_context_cycle", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "ctrl": True},
- {"properties": [("direction", 'NEXT'), ], },),
+ {"properties": [("direction", 'NEXT')]}),
+ ("buttons.start_filter", {"type": 'F', "value": 'PRESS', "ctrl": True}, None),
+ ("buttons.clear_filter", {"type": 'F', "value": 'PRESS', "alt": True}, None),
# Modifier panels
("object.modifier_remove", {"type": 'X', "value": 'PRESS'}, {"properties": [("report", True)]}),
("object.modifier_remove", {"type": 'DEL', "value": 'PRESS'}, {"properties": [("report", True)]}),
@@ -768,7 +773,8 @@ def km_outliner(params):
items.extend([
("outliner.highlight_update", {"type": 'MOUSEMOVE', "value": 'ANY', "any": True}, None),
("outliner.item_rename", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, None),
- ("outliner.item_rename", {"type": 'F2', "value": 'PRESS'}, None),
+ ("outliner.item_rename", {"type": 'F2', "value": 'PRESS'},
+ {"properties": [("use_active", True)]}),
("outliner.item_activate", {"type": 'LEFTMOUSE', "value": 'CLICK'},
{"properties": [("extend", False), ("deselect_all", not params.legacy)]}),
("outliner.item_activate", {"type": 'LEFTMOUSE', "value": 'CLICK', "ctrl": True},
@@ -783,17 +789,21 @@ def km_outliner(params):
{"properties": [("tweak", True), ("mode", "ADD")]}),
("outliner.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "ctrl": True},
{"properties": [("tweak", True), ("mode", "SUB")]}),
- ("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'UP')]}),
- ("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True},
+ ("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},
{"properties": [("direction", 'UP'), ("extend", True)]}),
- ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'DOWN')]}),
- ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True},
+ ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True},
+ {"properties": [("direction", 'DOWN')]}),
+ ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'DOWN'), ("extend", True)]}),
- ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'LEFT')]}),
- ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True},
+ ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True},
+ {"properties": [("direction", 'LEFT')]}),
+ ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'LEFT'), ("toggle_all", True)]}),
- ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'RIGHT')]}),
- ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True},
+ ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True},
+ {"properties": [("direction", 'RIGHT')]}),
+ ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'RIGHT'), ("toggle_all", True)]}),
("outliner.item_openclose", {"type": 'LEFTMOUSE', "value": 'CLICK'},
{"properties": [("all", False)]}),
@@ -809,9 +819,9 @@ def km_outliner(params):
("outliner.show_hierarchy", {"type": 'HOME', "value": 'PRESS'}, None),
("outliner.show_active", {"type": 'PERIOD', "value": 'PRESS'}, None),
("outliner.show_active", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None),
- ("outliner.scroll_page", {"type": 'PAGE_DOWN', "value": 'PRESS'},
+ ("outliner.scroll_page", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True},
{"properties": [("up", False)]}),
- ("outliner.scroll_page", {"type": 'PAGE_UP', "value": 'PRESS'},
+ ("outliner.scroll_page", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
{"properties": [("up", True)]}),
("outliner.show_one_level", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None),
("outliner.show_one_level", {"type": 'NUMPAD_MINUS', "value": 'PRESS'},
@@ -884,8 +894,8 @@ def km_uv_editor(params):
{"properties": [("extend", True), ("deselect", False)]}),
("uv.select_linked_pick", {"type": 'L', "value": 'PRESS', "shift": True},
{"properties": [("extend", False), ("deselect", True)]}),
- ("uv.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
- ("uv.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
+ ("uv.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("uv.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
*_template_items_select_actions(params, "uv.select_all"),
("uv.select_pinned", {"type": 'P', "value": 'PRESS', "shift": True}, None),
op_menu("IMAGE_MT_uvs_merge", {"type": 'M', "value": 'PRESS'}),
@@ -906,12 +916,12 @@ def km_uv_editor(params):
op_menu_pie("IMAGE_MT_uvs_snap_pie", {"type": 'S', "value": 'PRESS', "shift": True}),
op_menu("IMAGE_MT_uvs_select_mode", {"type": 'TAB', "value": 'PRESS', "ctrl": True}),
*_template_items_proportional_editing(connected=False),
- ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None),
+ ("transform.translate", {"type": 'G', "value": 'PRESS'}, None),
("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None),
- ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None),
- ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None),
- ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True, "repeat": False}, None),
- ("transform.mirror", {"type": 'M', "value": 'PRESS', "ctrl": True, "repeat": False}, None),
+ ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None),
+ ("transform.resize", {"type": 'S', "value": 'PRESS'}, None),
+ ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None),
+ ("transform.mirror", {"type": 'M', "value": 'PRESS', "ctrl": True}, None),
("wm.context_toggle", {"type": 'TAB', "value": 'PRESS', "shift": True},
{"properties": [("data_path", 'tool_settings.use_snap')]}),
("wm.context_menu_enum", {"type": 'TAB', "value": 'PRESS', "shift": True, "ctrl": True},
@@ -1004,12 +1014,17 @@ def km_view3d(params):
("view3d.localview", {"type": 'MOUSESMARTZOOM', "value": 'ANY'}, None),
("view3d.localview_remove_from", {"type": 'M', "value": 'PRESS'}, None),
# Navigation.
+ ("view3d.rotate", {"type": 'MOUSEROTATE', "value": 'ANY'}, None),
*((
("view3d.rotate", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "shift": True}, None),
("view3d.move", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None),
+ ("view3d.rotate", {"type": 'TRACKPADPAN', "value": 'ANY', "shift": True}, None),
+ ("view3d.move", {"type": 'TRACKPADPAN', "value": 'ANY'}, None),
) if params.use_v3d_mmb_pan else (
("view3d.rotate", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None),
("view3d.move", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "shift": True}, None),
+ ("view3d.rotate", {"type": 'TRACKPADPAN', "value": 'ANY'}, None),
+ ("view3d.move", {"type": 'TRACKPADPAN', "value": 'ANY', "shift": True}, None),
)),
("view3d.zoom", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "ctrl": True}, None),
("view3d.dolly", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "shift": True, "ctrl": True}, None),
@@ -1018,30 +1033,27 @@ def km_view3d(params):
("view3d.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'},
{"properties": [("use_all_regions", False)]}),
("view3d.smoothview", {"type": 'TIMER1', "value": 'ANY', "any": True}, None),
- ("view3d.rotate", {"type": 'TRACKPADPAN', "value": 'ANY'}, None),
- ("view3d.rotate", {"type": 'MOUSEROTATE', "value": 'ANY'}, None),
- ("view3d.move", {"type": 'TRACKPADPAN', "value": 'ANY', "shift": True}, None),
("view3d.zoom", {"type": 'TRACKPADZOOM', "value": 'ANY'}, None),
("view3d.zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None),
- ("view3d.zoom", {"type": 'NUMPAD_PLUS', "value": 'PRESS'},
+ ("view3d.zoom", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True},
{"properties": [("delta", 1)]}),
- ("view3d.zoom", {"type": 'NUMPAD_MINUS', "value": 'PRESS'},
+ ("view3d.zoom", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True},
{"properties": [("delta", -1)]}),
- ("view3d.zoom", {"type": 'EQUAL', "value": 'PRESS', "ctrl": True},
+ ("view3d.zoom", {"type": 'EQUAL', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("delta", 1)]}),
- ("view3d.zoom", {"type": 'MINUS', "value": 'PRESS', "ctrl": True},
+ ("view3d.zoom", {"type": 'MINUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("delta", -1)]}),
("view3d.zoom", {"type": 'WHEELINMOUSE', "value": 'PRESS'},
{"properties": [("delta", 1)]}),
("view3d.zoom", {"type": 'WHEELOUTMOUSE', "value": 'PRESS'},
{"properties": [("delta", -1)]}),
- ("view3d.dolly", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True},
+ ("view3d.dolly", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("delta", 1)]}),
- ("view3d.dolly", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True},
+ ("view3d.dolly", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("delta", -1)]}),
- ("view3d.dolly", {"type": 'EQUAL', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("view3d.dolly", {"type": 'EQUAL', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("delta", 1)]}),
- ("view3d.dolly", {"type": 'MINUS', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("view3d.dolly", {"type": 'MINUS', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("delta", -1)]}),
("view3d.view_center_camera", {"type": 'HOME', "value": 'PRESS'}, None),
("view3d.view_center_lock", {"type": 'HOME', "value": 'PRESS'}, None),
@@ -1062,18 +1074,18 @@ def km_view3d(params):
("view3d.view_camera", {"type": 'NUMPAD_0', "value": 'PRESS'}, None),
("view3d.view_axis", {"type": 'NUMPAD_1', "value": 'PRESS'},
{"properties": [("type", 'FRONT')]}),
- ("view3d.view_orbit", {"type": 'NUMPAD_2', "value": 'PRESS'},
+ ("view3d.view_orbit", {"type": 'NUMPAD_2', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'ORBITDOWN')]}),
("view3d.view_axis", {"type": 'NUMPAD_3', "value": 'PRESS'},
{"properties": [("type", 'RIGHT')]}),
- ("view3d.view_orbit", {"type": 'NUMPAD_4', "value": 'PRESS'},
+ ("view3d.view_orbit", {"type": 'NUMPAD_4', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'ORBITLEFT')]}),
("view3d.view_persportho", {"type": 'NUMPAD_5', "value": 'PRESS'}, None),
- ("view3d.view_orbit", {"type": 'NUMPAD_6', "value": 'PRESS'},
+ ("view3d.view_orbit", {"type": 'NUMPAD_6', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'ORBITRIGHT')]}),
("view3d.view_axis", {"type": 'NUMPAD_7', "value": 'PRESS'},
{"properties": [("type", 'TOP')]}),
- ("view3d.view_orbit", {"type": 'NUMPAD_8', "value": 'PRESS'},
+ ("view3d.view_orbit", {"type": 'NUMPAD_8', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'ORBITUP')]}),
("view3d.view_axis", {"type": 'NUMPAD_1', "value": 'PRESS', "ctrl": True},
{"properties": [("type", 'BACK')]}),
@@ -1081,17 +1093,17 @@ def km_view3d(params):
{"properties": [("type", 'LEFT')]}),
("view3d.view_axis", {"type": 'NUMPAD_7', "value": 'PRESS', "ctrl": True},
{"properties": [("type", 'BOTTOM')]}),
- ("view3d.view_pan", {"type": 'NUMPAD_2', "value": 'PRESS', "ctrl": True},
+ ("view3d.view_pan", {"type": 'NUMPAD_2', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'PANDOWN')]}),
- ("view3d.view_pan", {"type": 'NUMPAD_4', "value": 'PRESS', "ctrl": True},
+ ("view3d.view_pan", {"type": 'NUMPAD_4', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'PANLEFT')]}),
- ("view3d.view_pan", {"type": 'NUMPAD_6', "value": 'PRESS', "ctrl": True},
+ ("view3d.view_pan", {"type": 'NUMPAD_6', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'PANRIGHT')]}),
- ("view3d.view_pan", {"type": 'NUMPAD_8', "value": 'PRESS', "ctrl": True},
+ ("view3d.view_pan", {"type": 'NUMPAD_8', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'PANUP')]}),
- ("view3d.view_roll", {"type": 'NUMPAD_4', "value": 'PRESS', "shift": True},
+ ("view3d.view_roll", {"type": 'NUMPAD_4', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'LEFT')]}),
- ("view3d.view_roll", {"type": 'NUMPAD_6', "value": 'PRESS', "shift": True},
+ ("view3d.view_roll", {"type": 'NUMPAD_6', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'RIGHT')]}),
("view3d.view_orbit", {"type": 'NUMPAD_9', "value": 'PRESS'},
{"properties": [("angle", 3.1415927), ("type", 'ORBITRIGHT')]}),
@@ -1193,19 +1205,19 @@ def km_view3d(params):
("view3d.copybuffer", {"type": 'C', "value": 'PRESS', "ctrl": True}, None),
("view3d.pastebuffer", {"type": 'V', "value": 'PRESS', "ctrl": True}, None),
# Transform.
- ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None),
+ ("transform.translate", {"type": 'G', "value": 'PRESS'}, None),
("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None),
- ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None),
- ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None),
- ("transform.bend", {"type": 'W', "value": 'PRESS', "shift": True, "repeat": False}, None),
- ("transform.tosphere", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True, "repeat": False}, None),
- ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True, "repeat": False}, None),
- ("transform.mirror", {"type": 'M', "value": 'PRESS', "ctrl": True, "repeat": False}, None),
+ ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None),
+ ("transform.resize", {"type": 'S', "value": 'PRESS'}, None),
+ ("transform.bend", {"type": 'W', "value": 'PRESS', "shift": True}, None),
+ ("transform.tosphere", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True}, None),
+ ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None),
+ ("transform.mirror", {"type": 'M', "value": 'PRESS', "ctrl": True}, None),
("wm.context_toggle", {"type": 'TAB', "value": 'PRESS', "shift": True},
{"properties": [("data_path", 'tool_settings.use_snap')]}),
op_panel("VIEW3D_PT_snapping", {"type": 'TAB', "value": 'PRESS', "shift": True, "ctrl": True}, [("keep_open", False)]),
("object.transform_axis_target", {"type": 'T', "value": 'PRESS', "shift": True}, None),
- ("transform.skin_resize", {"type": 'A', "value": 'PRESS', "ctrl": True, "repeat": False}, None),
+ ("transform.skin_resize", {"type": 'A', "value": 'PRESS', "ctrl": True}, None),
])
if not params.legacy:
@@ -1261,9 +1273,9 @@ def km_view3d(params):
{"properties": [("type", 'RIGHT')]}),
("transform.create_orientation", {"type": 'SPACE', "value": 'PRESS', "ctrl": True, "alt": True},
{"properties": [("use", True)]}),
- ("transform.translate", {"type": 'T', "value": 'PRESS', "shift": True, "repeat": False},
+ ("transform.translate", {"type": 'T', "value": 'PRESS', "shift": True},
{"properties": [("texture_space", True)]}),
- ("transform.resize", {"type": 'T', "value": 'PRESS', "shift": True, "alt": True, "repeat": False},
+ ("transform.resize", {"type": 'T', "value": 'PRESS', "shift": True, "alt": True},
{"properties": [("texture_space", True)]}),
# Old pivot.
("wm.context_set_enum", {"type": 'COMMA', "value": 'PRESS'},
@@ -1342,8 +1354,8 @@ def km_mask_editing(params):
{"properties": [("mode", 'ADD')]}),
("mask.select_lasso", {"type": params.action_tweak, "value": 'ANY', "shift": True, "ctrl": True, "alt": True},
{"properties": [("mode", 'SUB')]}),
- ("mask.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
- ("mask.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
+ ("mask.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("mask.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("mask.hide_view_clear", {"type": 'H', "value": 'PRESS', "alt": True}, None),
("mask.hide_view_set", {"type": 'H', "value": 'PRESS'},
{"properties": [("unselected", False)]}),
@@ -1363,13 +1375,13 @@ def km_mask_editing(params):
("mask.duplicate_move", {"type": 'D', "value": 'PRESS', "shift": True}, None),
("mask.copy_splines", {"type": 'C', "value": 'PRESS', "ctrl": True}, None),
("mask.paste_splines", {"type": 'V', "value": 'PRESS', "ctrl": True}, None),
- ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None),
+ ("transform.translate", {"type": 'G', "value": 'PRESS'}, None),
("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None),
- ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None),
- ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None),
- ("transform.tosphere", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True, "repeat": False}, None),
- ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True, "repeat": False}, None),
- ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True, "repeat": False},
+ ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None),
+ ("transform.resize", {"type": 'S', "value": 'PRESS'}, None),
+ ("transform.tosphere", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True}, None),
+ ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None),
+ ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True},
{"properties": [("mode", 'MASK_SHRINKFATTEN')]}),
])
@@ -1436,6 +1448,7 @@ def km_time_scrub(_params):
return keymap
+
def km_time_scrub_clip(_params):
items = []
keymap = (
@@ -1535,8 +1548,8 @@ def km_graph_editor(params):
{"properties": [("mode", 'MARKERS_COLUMN')]}),
("graph.select_column", {"type": 'K', "value": 'PRESS', "alt": True},
{"properties": [("mode", 'MARKERS_BETWEEN')]}),
- ("graph.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
- ("graph.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
+ ("graph.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("graph.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("graph.select_linked", {"type": 'L', "value": 'PRESS'}, None),
("graph.frame_jump", {"type": 'G', "value": 'PRESS', "ctrl": True}, None),
op_menu_pie("GRAPH_MT_snap_pie", {"type": 'S', "value": 'PRESS', "shift": True}),
@@ -1567,12 +1580,12 @@ def km_graph_editor(params):
("graph.fmodifier_add", {"type": 'M', "value": 'PRESS', "shift": True, "ctrl": True},
{"properties": [("only_active", False)]}),
("anim.channels_editable_toggle", {"type": 'TAB', "value": 'PRESS'}, None),
- ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None),
+ ("transform.translate", {"type": 'G', "value": 'PRESS'}, None),
("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None),
- ("transform.transform", {"type": 'E', "value": 'PRESS', "repeat": False},
+ ("transform.transform", {"type": 'E', "value": 'PRESS'},
{"properties": [("mode", 'TIME_EXTEND')]}),
- ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None),
- ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None),
+ ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None),
+ ("transform.resize", {"type": 'S', "value": 'PRESS'}, None),
("wm.context_toggle", {"type": 'O', "value": 'PRESS'},
{"properties": [("data_path", 'tool_settings.use_proportional_fcurve')]}),
op_menu_pie("VIEW3D_MT_proportional_editing_falloff_pie", {"type": 'O', "value": 'PRESS', "shift": True}),
@@ -1613,8 +1626,8 @@ def km_image_generic(_params):
("image.read_viewlayers", {"type": 'R', "value": 'PRESS', "ctrl": True}, None),
("image.save", {"type": 'S', "value": 'PRESS', "alt": True}, None),
("image.save_as", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True}, None),
- ("image.cycle_render_slot", {"type": 'J', "value": 'PRESS'}, None),
- ("image.cycle_render_slot", {"type": 'J', "value": 'PRESS', "alt": True},
+ ("image.cycle_render_slot", {"type": 'J', "value": 'PRESS', "repeat": True}, None),
+ ("image.cycle_render_slot", {"type": 'J', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("reverse", True)]}),
])
@@ -1641,8 +1654,8 @@ def km_image(params):
("image.view_ndof", {"type": 'NDOF_MOTION', "value": 'ANY'}, None),
("image.view_zoom_in", {"type": 'WHEELINMOUSE', "value": 'PRESS'}, None),
("image.view_zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS'}, None),
- ("image.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None),
- ("image.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None),
+ ("image.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None),
+ ("image.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None),
("image.view_zoom", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "ctrl": True}, None),
("image.view_zoom", {"type": 'TRACKPADZOOM', "value": 'ANY'}, None),
("image.view_zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None),
@@ -1766,9 +1779,9 @@ def km_node_editor(params):
("node.links_cut", {"type": 'EVT_TWEAK_R', "value": 'ANY', "ctrl": True}, None),
("node.select_link_viewer", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "ctrl": True}, None),
("node.backimage_move", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "alt": True}, None),
- ("node.backimage_zoom", {"type": 'V', "value": 'PRESS'},
+ ("node.backimage_zoom", {"type": 'V', "value": 'PRESS', "repeat": True},
{"properties": [("factor", 1.0 / 1.2)]}),
- ("node.backimage_zoom", {"type": 'V', "value": 'PRESS', "alt": True},
+ ("node.backimage_zoom", {"type": 'V', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("factor", 1.2)]}),
("node.backimage_fit", {"type": 'HOME', "value": 'PRESS', "alt": True}, None),
("node.backimage_sample", {"type": params.action_mouse, "value": 'PRESS', "alt": True}, None),
@@ -1823,13 +1836,13 @@ def km_node_editor(params):
("node.translate_attach", {"type": 'G', "value": 'PRESS'}, None),
("node.translate_attach", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None),
("node.translate_attach", {"type": params.select_tweak, "value": 'ANY'}, None),
- ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None),
+ ("transform.translate", {"type": 'G', "value": 'PRESS'}, None),
("transform.translate", {"type": 'EVT_TWEAK_L', "value": 'ANY'},
{"properties": [("release_confirm", True)]}),
("transform.translate", {"type": params.select_tweak, "value": 'ANY'},
{"properties": [("release_confirm", True)]}),
- ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None),
- ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None),
+ ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None),
+ ("transform.resize", {"type": 'S', "value": 'PRESS'}, None),
("node.move_detach_links", {"type": 'D', "value": 'PRESS', "alt": True}, None),
("node.move_detach_links_release", {"type": params.action_tweak, "value": 'ANY', "alt": True}, None),
("node.move_detach_links", {"type": params.select_tweak, "value": 'ANY', "alt": True}, None),
@@ -1900,17 +1913,17 @@ def km_file_browser(params):
("file.smoothscroll", {"type": 'TIMER1', "value": 'ANY', "any": True}, None),
("file.bookmark_add", {"type": 'B', "value": 'PRESS', "ctrl": True}, None),
("file.start_filter", {"type": 'F', "value": 'PRESS', "ctrl": True}, None),
- ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS'},
+ ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True},
{"properties": [("increment", 1)]}),
- ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True},
+ ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("increment", 10)]}),
- ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True},
+ ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("increment", 100)]}),
- ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS'},
+ ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True},
{"properties": [("increment", -1)]}),
- ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True},
+ ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("increment", -10)]}),
- ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True},
+ ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("increment", -100)]}),
*_template_items_context_menu("FILEBROWSER_MT_context_menu", params.context_menu_event),
])
@@ -1942,29 +1955,29 @@ def km_file_browser_main(params):
{"properties": [("extend", True), ("open", False)]}),
("file.select", {"type": 'LEFTMOUSE', "value": 'CLICK', "shift": True},
{"properties": [("extend", True), ("fill", True), ("open", False)]}),
- ("file.select_walk", {"type": 'UP_ARROW', "value": 'PRESS'},
+ ("file.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'UP')]}),
("file.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True},
{"properties": [("direction", 'UP'), ("extend", True)]}),
- ("file.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("file.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("direction", 'UP'), ("extend", True), ("fill", True)]}),
- ("file.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS'},
+ ("file.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'DOWN')]}),
- ("file.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True},
+ ("file.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'DOWN'), ("extend", True)]}),
- ("file.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("file.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("direction", 'DOWN'), ("extend", True), ("fill", True)]}),
- ("file.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS'},
+ ("file.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'LEFT')]}),
- ("file.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True},
+ ("file.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'LEFT'), ("extend", True)]}),
- ("file.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("file.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("direction", 'LEFT'), ("extend", True), ("fill", True)]}),
- ("file.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS'},
+ ("file.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'RIGHT')]}),
- ("file.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True},
+ ("file.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'RIGHT'), ("extend", True)]}),
- ("file.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("file.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("direction", 'RIGHT'), ("extend", True), ("fill", True)]}),
("file.previous", {"type": 'BUTTON4MOUSE', "value": 'CLICK'}, None),
("file.next", {"type": 'BUTTON5MOUSE', "value": 'CLICK'}, None),
@@ -1991,17 +2004,17 @@ def km_file_browser_buttons(_params):
)
items.extend([
- ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS'},
+ ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True},
{"properties": [("increment", 1)]}),
- ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True},
+ ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("increment", 10)]}),
- ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True},
+ ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("increment", 100)]}),
- ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS'},
+ ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True},
{"properties": [("increment", -1)]}),
- ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True},
+ ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("increment", -10)]}),
- ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True},
+ ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("increment", -100)]}),
])
@@ -2085,8 +2098,8 @@ def km_dopesheet(params):
{"properties": [("mode", 'MARKERS_COLUMN')]}),
("action.select_column", {"type": 'K', "value": 'PRESS', "alt": True},
{"properties": [("mode", 'MARKERS_BETWEEN')]}),
- ("action.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
- ("action.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
+ ("action.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("action.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("action.select_linked", {"type": 'L', "value": 'PRESS'}, None),
("action.frame_jump", {"type": 'G', "value": 'PRESS', "ctrl": True}, None),
op_menu_pie("DOPESHEET_MT_snap_pie", {"type": 'S', "value": 'PRESS', "shift": True}),
@@ -2112,15 +2125,15 @@ def km_dopesheet(params):
("action.view_frame", {"type": 'NUMPAD_0', "value": 'PRESS'}, None),
("anim.channels_editable_toggle", {"type": 'TAB', "value": 'PRESS'}, None),
("anim.channels_find", {"type": 'F', "value": 'PRESS', "ctrl": True}, None),
- ("transform.transform", {"type": 'G', "value": 'PRESS', "repeat": False},
+ ("transform.transform", {"type": 'G', "value": 'PRESS'},
{"properties": [("mode", 'TIME_TRANSLATE')]}),
("transform.transform", {"type": params.select_tweak, "value": 'ANY'},
{"properties": [("mode", 'TIME_TRANSLATE')]}),
- ("transform.transform", {"type": 'E', "value": 'PRESS', "repeat": False},
+ ("transform.transform", {"type": 'E', "value": 'PRESS'},
{"properties": [("mode", 'TIME_EXTEND')]}),
- ("transform.transform", {"type": 'S', "value": 'PRESS', "repeat": False},
+ ("transform.transform", {"type": 'S', "value": 'PRESS'},
{"properties": [("mode", 'TIME_SCALE')]}),
- ("transform.transform", {"type": 'T', "value": 'PRESS', "shift": True, "repeat": False},
+ ("transform.transform", {"type": 'T', "value": 'PRESS', "shift": True},
{"properties": [("mode", 'TIME_SLIDE')]}),
("wm.context_toggle", {"type": 'O', "value": 'PRESS'},
{"properties": [("data_path", 'tool_settings.use_proportional_action')]}),
@@ -2238,19 +2251,19 @@ def km_nla_editor(params):
("nla.split", {"type": 'Y', "value": 'PRESS'}, None),
("nla.mute_toggle", {"type": 'H', "value": 'PRESS'}, None),
("nla.swap", {"type": 'F', "value": 'PRESS', "alt": True}, None),
- ("nla.move_up", {"type": 'PAGE_UP', "value": 'PRESS'}, None),
- ("nla.move_down", {"type": 'PAGE_DOWN', "value": 'PRESS'}, None),
+ ("nla.move_up", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, None),
+ ("nla.move_down", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, None),
("nla.apply_scale", {"type": 'A', "value": 'PRESS', "ctrl": True}, None),
("nla.clear_scale", {"type": 'S', "value": 'PRESS', "alt": True}, None),
op_menu_pie("NLA_MT_snap_pie", {"type": 'S', "value": 'PRESS', "shift": True}),
("nla.fmodifier_add", {"type": 'M', "value": 'PRESS', "shift": True, "ctrl": True}, None),
- ("transform.transform", {"type": 'G', "value": 'PRESS', "repeat": False},
+ ("transform.transform", {"type": 'G', "value": 'PRESS'},
{"properties": [("mode", 'TRANSLATION')]}),
("transform.transform", {"type": params.select_tweak, "value": 'ANY'},
{"properties": [("mode", 'TRANSLATION')]}),
- ("transform.transform", {"type": 'E', "value": 'PRESS', "repeat": False},
+ ("transform.transform", {"type": 'E', "value": 'PRESS'},
{"properties": [("mode", 'TIME_EXTEND')]}),
- ("transform.transform", {"type": 'S', "value": 'PRESS', "repeat": False},
+ ("transform.transform", {"type": 'S', "value": 'PRESS'},
{"properties": [("mode", 'TIME_SCALE')]}),
("marker.add", {"type": 'M', "value": 'PRESS'}, None),
("marker.rename", {"type": 'M', "value": 'PRESS', "ctrl": True}, None),
@@ -2295,9 +2308,9 @@ def km_text(params):
{"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}),
("wm.context_cycle_int", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "ctrl": True},
{"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}),
- ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True},
+ ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}),
- ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True},
+ ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}),
])
@@ -2309,9 +2322,9 @@ def km_text(params):
items.extend([
("text.new", {"type": 'N', "value": 'PRESS', "ctrl": True}, None),
- ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True},
+ ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
- ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True},
+ ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
])
@@ -2323,20 +2336,20 @@ def km_text(params):
("text.run_script", {"type": 'P', "value": 'PRESS', "alt": True}, None),
("text.cut", {"type": 'X', "value": 'PRESS', "ctrl": True}, None),
("text.copy", {"type": 'C', "value": 'PRESS', "ctrl": True}, None),
- ("text.paste", {"type": 'V', "value": 'PRESS', "ctrl": True}, None),
+ ("text.paste", {"type": 'V', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("text.cut", {"type": 'DEL', "value": 'PRESS', "shift": True}, None),
("text.copy", {"type": 'INSERT', "value": 'PRESS', "ctrl": True}, None),
- ("text.paste", {"type": 'INSERT', "value": 'PRESS', "shift": True}, None),
- ("text.duplicate_line", {"type": 'D', "value": 'PRESS', "ctrl": True}, None),
+ ("text.paste", {"type": 'INSERT', "value": 'PRESS', "shift": True, "repeat": True}, None),
+ ("text.duplicate_line", {"type": 'D', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("text.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, None),
("text.select_line", {"type": 'A', "value": 'PRESS', "shift": True, "ctrl": True}, None),
("text.select_word", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, None),
- ("text.move_lines", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("text.move_lines", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("direction", 'UP')]}),
- ("text.move_lines", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("text.move_lines", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("direction", 'DOWN')]}),
- ("text.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS'}, None),
- ("text.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True}, None),
+ ("text.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS', "repeat": True}, None),
+ ("text.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True, "repeat": True}, None),
("text.comment_toggle", {"type": 'SLASH', "value": 'PRESS', "ctrl": True}, None),
("text.move", {"type": 'HOME', "value": 'PRESS'},
{"properties": [("type", 'LINE_BEGIN')]}),
@@ -2346,21 +2359,21 @@ def km_text(params):
{"properties": [("type", 'LINE_END')]}),
("text.move", {"type": 'E', "value": 'PRESS', "shift": True, "ctrl": True},
{"properties": [("type", 'LINE_END')]}),
- ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS'},
+ ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS'},
+ ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_CHARACTER')]}),
- ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True},
+ ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
- ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True},
+ ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
- ("text.move", {"type": 'UP_ARROW', "value": 'PRESS'},
+ ("text.move", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_LINE')]}),
- ("text.move", {"type": 'DOWN_ARROW', "value": 'PRESS'},
+ ("text.move", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_LINE')]}),
- ("text.move", {"type": 'PAGE_UP', "value": 'PRESS'},
+ ("text.move", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_PAGE')]}),
- ("text.move", {"type": 'PAGE_DOWN', "value": 'PRESS'},
+ ("text.move", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_PAGE')]}),
("text.move", {"type": 'HOME', "value": 'PRESS', "ctrl": True},
{"properties": [("type", 'FILE_TOP')]}),
@@ -2370,33 +2383,33 @@ def km_text(params):
{"properties": [("type", 'LINE_BEGIN')]}),
("text.move_select", {"type": 'END', "value": 'PRESS', "shift": True},
{"properties": [("type", 'LINE_END')]}),
- ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True},
+ ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True},
+ ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'NEXT_CHARACTER')]}),
- ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
- ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
- ("text.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True},
+ ("text.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_LINE')]}),
- ("text.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True},
+ ("text.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'NEXT_LINE')]}),
- ("text.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True},
+ ("text.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_PAGE')]}),
- ("text.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True},
+ ("text.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'NEXT_PAGE')]}),
("text.move_select", {"type": 'HOME', "value": 'PRESS', "shift": True, "ctrl": True},
{"properties": [("type", 'FILE_TOP')]}),
("text.move_select", {"type": 'END', "value": 'PRESS', "shift": True, "ctrl": True},
{"properties": [("type", 'FILE_BOTTOM')]}),
- ("text.delete", {"type": 'DEL', "value": 'PRESS'},
+ ("text.delete", {"type": 'DEL', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_CHARACTER')]}),
- ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS'},
+ ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True},
+ ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("text.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True},
+ ("text.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
@@ -2412,17 +2425,17 @@ def km_text(params):
{"properties": [("lines", -1)]}),
("text.scroll", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'},
{"properties": [("lines", 1)]}),
- ("text.line_break", {"type": 'RET', "value": 'PRESS'}, None),
- ("text.line_break", {"type": 'NUMPAD_ENTER', "value": 'PRESS'}, None),
- ("text.line_number", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None),
+ ("text.line_break", {"type": 'RET', "value": 'PRESS', "repeat": True}, None),
+ ("text.line_break", {"type": 'NUMPAD_ENTER', "value": 'PRESS', "repeat": True}, None),
+ ("text.line_number", {"type": 'TEXTINPUT', "value": 'ANY', "any": True, "repeat": True}, None),
op_menu("TEXT_MT_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}),
- ("text.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None),
+ ("text.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True, "repeat": True}, None),
])
return keymap
-def km_sequencercommon(_params):
+def km_sequencercommon(params):
items = []
keymap = (
"SequencerCommon",
@@ -2441,7 +2454,7 @@ def km_sequencercommon(_params):
{"properties": [("data_path", 'space_data.view_type'), ("value_1", 'SEQUENCER'), ("value_2", 'PREVIEW')]}),
])
- if _params.select_mouse == 'LEFTMOUSE' and not _params.legacy:
+ if params.select_mouse == 'LEFTMOUSE' and not params.legacy:
# Quick switch to select tool, since left select can't easily
# select with any tool active.
items.extend([
@@ -2494,17 +2507,17 @@ def km_sequencer(params):
("sequencer.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None),
("sequencer.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None),
("sequencer.view_frame", {"type": 'NUMPAD_0', "value": 'PRESS'}, None),
- ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS'},
+ ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
{"properties": [("next", True), ("center", False)]}),
- ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS'},
+ ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True},
{"properties": [("next", False), ("center", False)]}),
- ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS', "alt": True},
+ ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("next", True), ("center", True)]}),
- ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS', "alt": True},
+ ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("next", False), ("center", True)]}),
- ("sequencer.swap", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True},
+ ("sequencer.swap", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("side", 'LEFT')]}),
- ("sequencer.swap", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True},
+ ("sequencer.swap", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("side", 'RIGHT')]}),
("sequencer.gap_remove", {"type": 'BACK_SPACE', "value": 'PRESS'},
{"properties": [("all", False)]}),
@@ -2534,8 +2547,8 @@ def km_sequencer(params):
("sequencer.select",
{"type": params.select_mouse, "value": 'PRESS' if params.legacy else 'CLICK', "ctrl": True, "shift": True},
{"properties": [("side_of_frame", True), ("linked_time", True), ("extend", True)]}),
- ("sequencer.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
- ("sequencer.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
+ ("sequencer.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("sequencer.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("sequencer.select_linked_pick", {"type": 'L', "value": 'PRESS'},
{"properties": [("extend", False)]}),
("sequencer.select_linked_pick", {"type": 'L', "value": 'PRESS', "shift": True},
@@ -2556,9 +2569,9 @@ def km_sequencer(params):
("sequencer.slip", {"type": 'S', "value": 'PRESS'}, None),
("wm.context_set_int", {"type": 'O', "value": 'PRESS'},
{"properties": [("data_path", 'scene.sequence_editor.overlay_frame'), ("value", 0)]}),
- ("transform.seq_slide", {"type": 'G', "value": 'PRESS', "repeat": False}, None),
+ ("transform.seq_slide", {"type": 'G', "value": 'PRESS'}, None),
("transform.seq_slide", {"type": params.select_tweak, "value": 'ANY'}, None),
- ("transform.transform", {"type": 'E', "value": 'PRESS', "repeat": False},
+ ("transform.transform", {"type": 'E', "value": 'PRESS'},
{"properties": [("mode", 'TIME_EXTEND')]}),
("marker.add", {"type": 'M', "value": 'PRESS'}, None),
("marker.rename", {"type": 'M', "value": 'PRESS', "ctrl": True}, None),
@@ -2614,9 +2627,9 @@ def km_console(_params):
)
items.extend([
- ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True},
+ ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
- ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True},
+ ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
("console.move", {"type": 'HOME', "value": 'PRESS'},
{"properties": [("type", 'LINE_BEGIN')]}),
@@ -2626,27 +2639,27 @@ def km_console(_params):
{"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}),
("wm.context_cycle_int", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "ctrl": True},
{"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}),
- ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True},
+ ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}),
- ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True},
+ ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}),
- ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS'},
+ ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS'},
+ ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_CHARACTER')]}),
- ("console.history_cycle", {"type": 'UP_ARROW', "value": 'PRESS'},
+ ("console.history_cycle", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("reverse", True)]}),
- ("console.history_cycle", {"type": 'DOWN_ARROW', "value": 'PRESS'},
+ ("console.history_cycle", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("reverse", False)]}),
- ("console.delete", {"type": 'DEL', "value": 'PRESS'},
+ ("console.delete", {"type": 'DEL', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_CHARACTER')]}),
- ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS'},
- {"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True},
+ ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("console.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True},
+ ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True, "repeat": True},
+ {"properties": [("type", 'PREVIOUS_CHARACTER')], "repeat": True}),
+ ("console.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
- ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True},
+ ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
("console.clear_line", {"type": 'RET', "value": 'PRESS', "shift": True}, None),
("console.clear_line", {"type": 'NUMPAD_ENTER', "value": 'PRESS', "shift": True}, None),
@@ -2656,15 +2669,15 @@ def km_console(_params):
{"properties": [("interactive", True)]}),
("console.copy_as_script", {"type": 'C', "value": 'PRESS', "shift": True, "ctrl": True}, None),
("console.copy", {"type": 'C', "value": 'PRESS', "ctrl": True}, None),
- ("console.paste", {"type": 'V', "value": 'PRESS', "ctrl": True}, None),
+ ("console.paste", {"type": 'V', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("console.select_set", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None),
("console.select_word", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, None),
- ("console.insert", {"type": 'TAB', "value": 'PRESS', "ctrl": True},
+ ("console.insert", {"type": 'TAB', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("text", '\t')]}),
- ("console.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS'}, None),
- ("console.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True}, None),
+ ("console.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS', "repeat": True}, None),
+ ("console.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True, "repeat": True}, None),
*_template_items_context_menu("CONSOLE_MT_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}),
- ("console.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None),
+ ("console.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True, "repeat": True}, None),
])
return keymap
@@ -2684,9 +2697,9 @@ def km_clip(_params):
sidebar_key={"type": 'N', "value": 'PRESS'},
),
("clip.open", {"type": 'O', "value": 'PRESS', "alt": True}, None),
- ("clip.track_markers", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True},
+ ("clip.track_markers", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("backwards", True), ("sequence", False)]}),
- ("clip.track_markers", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True},
+ ("clip.track_markers", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("backwards", False), ("sequence", False)]}),
("clip.track_markers", {"type": 'T', "value": 'PRESS', "ctrl": True},
{"properties": [("backwards", False), ("sequence", True)]}),
@@ -2721,8 +2734,8 @@ def km_clip_editor(params):
("clip.view_zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None),
("clip.view_zoom_in", {"type": 'WHEELINMOUSE', "value": 'PRESS'}, None),
("clip.view_zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS'}, None),
- ("clip.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None),
- ("clip.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None),
+ ("clip.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None),
+ ("clip.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None),
("clip.view_zoom_ratio", {"type": 'NUMPAD_8', "value": 'PRESS', "ctrl": True},
{"properties": [("ratio", 8.0)]}),
("clip.view_zoom_ratio", {"type": 'NUMPAD_4', "value": 'PRESS', "ctrl": True},
@@ -2749,13 +2762,13 @@ def km_clip_editor(params):
("clip.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None),
("clip.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None),
("clip.view_ndof", {"type": 'NDOF_MOTION', "value": 'ANY'}, None),
- ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("position", 'PATHSTART')]}),
- ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("position", 'PATHEND')]}),
- ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "alt": True},
+ ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "alt": True, "repeat": True},
{"properties": [("position", 'FAILEDPREV')]}),
- ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "alt": True},
+ ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "alt": True, "repeat": True},
{"properties": [("position", 'PATHSTART')]}),
("clip.change_frame", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None),
("clip.select", {"type": params.select_mouse, "value": 'PRESS'},
@@ -2798,10 +2811,10 @@ def km_clip_editor(params):
{"properties": [("data_path", 'space_data.show_marker_search')]}),
("wm.context_toggle", {"type": 'M', "value": 'PRESS'},
{"properties": [("data_path", 'space_data.use_mute_footage')]}),
- ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None),
+ ("transform.translate", {"type": 'G', "value": 'PRESS'}, None),
("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None),
- ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None),
- ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None),
+ ("transform.resize", {"type": 'S', "value": 'PRESS'}, None),
+ ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None),
("clip.clear_track_path", {"type": 'T', "value": 'PRESS', "alt": True},
{"properties": [("action", 'REMAINED'), ("clear_active", False)]}),
("clip.clear_track_path", {"type": 'T', "value": 'PRESS', "shift": True},
@@ -2855,10 +2868,10 @@ def km_clip_graph_editor(params):
{"properties": [("action", 'ALL'), ("clear_active", True)]}),
("clip.graph_disable_markers", {"type": 'D', "value": 'PRESS', "shift": True},
{"properties": [("action", 'TOGGLE')]}),
- ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None),
+ ("transform.translate", {"type": 'G', "value": 'PRESS'}, None),
("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None),
- ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None),
- ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None),
+ ("transform.resize", {"type": 'S', "value": 'PRESS'}, None),
+ ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None),
])
if params.select_mouse == 'LEFTMOUSE' and not params.legacy:
@@ -2905,17 +2918,17 @@ def km_frames(params):
items.extend([
# Frame offsets
- ("screen.frame_offset", {"type": 'LEFT_ARROW', "value": 'PRESS'},
+ ("screen.frame_offset", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("delta", -1)]}),
- ("screen.frame_offset", {"type": 'RIGHT_ARROW', "value": 'PRESS'},
+ ("screen.frame_offset", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("delta", 1)]}),
- ("screen.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True},
+ ("screen.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("end", True)]}),
- ("screen.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True},
+ ("screen.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("end", False)]}),
- ("screen.keyframe_jump", {"type": 'UP_ARROW', "value": 'PRESS'},
+ ("screen.keyframe_jump", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("next", True)]}),
- ("screen.keyframe_jump", {"type": 'DOWN_ARROW', "value": 'PRESS'},
+ ("screen.keyframe_jump", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("next", False)]}),
("screen.keyframe_jump", {"type": 'MEDIA_LAST', "value": 'PRESS'},
{"properties": [("next", True)]}),
@@ -2947,13 +2960,13 @@ def km_frames(params):
else:
# Old playback
items.extend([
- ("screen.frame_offset", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True},
+ ("screen.frame_offset", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("delta", 10)]}),
- ("screen.frame_offset", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True},
+ ("screen.frame_offset", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("delta", -10)]}),
- ("screen.frame_jump", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("screen.frame_jump", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("end", True)]}),
- ("screen.frame_jump", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("screen.frame_jump", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("end", False)]}),
("screen.animation_play", {"type": 'A', "value": 'PRESS', "alt": True}, None),
("screen.animation_play", {"type": 'A', "value": 'PRESS', "shift": True, "alt": True},
@@ -3019,9 +3032,9 @@ def km_animation_channels(params):
*_template_items_select_actions(params, "anim.channels_select_all"),
("anim.channels_select_box", {"type": 'B', "value": 'PRESS'}, None),
("anim.channels_select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None),
- ("anim.channels_select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "shift": True,},
+ ("anim.channels_select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "shift": True},
{"properties": [("extend", True)]}),
- ("anim.channels_select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "ctrl": True,},
+ ("anim.channels_select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "ctrl": True},
{"properties": [("deselect", True)]}),
# Delete.
("anim.channels_delete", {"type": 'X', "value": 'PRESS'}, None),
@@ -3039,9 +3052,9 @@ def km_animation_channels(params):
("anim.channels_collapse", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True},
{"properties": [("all", False)]}),
# Move.
- ("anim.channels_move", {"type": 'PAGE_UP', "value": 'PRESS'},
+ ("anim.channels_move", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'UP')]}),
- ("anim.channels_move", {"type": 'PAGE_DOWN', "value": 'PRESS'},
+ ("anim.channels_move", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'DOWN')]}),
("anim.channels_move", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True},
{"properties": [("direction", 'TOP')]}),
@@ -3126,8 +3139,8 @@ def _grease_pencil_selection(params):
# Select grouped
("gpencil.select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}, None),
# Select more/less
- ("gpencil.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
- ("gpencil.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
+ ("gpencil.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("gpencil.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
]
@@ -3199,17 +3212,17 @@ def km_grease_pencil_stroke_edit_mode(params):
# Move to layer
op_menu("GPENCIL_MT_move_to_layer", {"type": 'M', "value": 'PRESS'}),
# Transform tools
- ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None),
+ ("transform.translate", {"type": 'G', "value": 'PRESS'}, None),
("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None),
- ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None),
- ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None),
- ("transform.mirror", {"type": 'M', "value": 'PRESS', "ctrl": True, "repeat": False}, None),
- ("transform.bend", {"type": 'W', "value": 'PRESS', "shift": True, "repeat": False}, None),
- ("transform.tosphere", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True, "repeat": False}, None),
- ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True, "repeat": False}, None),
- ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True, "repeat": False},
+ ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None),
+ ("transform.resize", {"type": 'S', "value": 'PRESS'}, None),
+ ("transform.mirror", {"type": 'M', "value": 'PRESS', "ctrl": True}, None),
+ ("transform.bend", {"type": 'W', "value": 'PRESS', "shift": True}, None),
+ ("transform.tosphere", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True}, None),
+ ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None),
+ ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True},
{"properties": [("mode", 'GPENCIL_SHRINKFATTEN')]}),
- ("transform.transform", {"type": 'F', "value": 'PRESS', "shift": True, "repeat": False},
+ ("transform.transform", {"type": 'F', "value": 'PRESS', "shift": True},
{"properties": [("mode", 'GPENCIL_OPACITY')]}),
# Proportional editing.
*_template_items_proportional_editing(connected=True),
@@ -3263,7 +3276,7 @@ def km_grease_pencil_stroke_paint_mode(params):
("gpencil.active_frames_delete_all", {"type": 'X', "value": 'PRESS', "shift": True}, None),
("gpencil.active_frames_delete_all", {"type": 'DEL', "value": 'PRESS', "shift": True}, None),
# Interpolation
- ("gpencil.interpolate", {"type": 'E', "value": 'PRESS', "ctrl": True, "alt": True}, None),
+ ("gpencil.interpolate", {"type": 'E', "value": 'PRESS', "ctrl": True}, None),
("gpencil.interpolate_sequence", {"type": 'E', "value": 'PRESS', "shift": True, "ctrl": True}, None),
# Show/hide
("gpencil.reveal", {"type": 'H', "value": 'PRESS', "alt": True}, None),
@@ -3427,7 +3440,7 @@ def km_grease_pencil_stroke_sculpt_mode(params):
("gpencil.copy", {"type": 'C', "value": 'PRESS', "ctrl": True}, None),
# Display
*_grease_pencil_display(),
- # Keyframe menu
+ # Keyframe menu
("gpencil.blank_frame_add", {"type": 'I', "value": 'PRESS', "shift": True}, None),
("gpencil.active_frames_delete_all", {"type": 'X', "value": 'PRESS', "shift": True}, None),
("gpencil.active_frames_delete_all", {"type": 'DEL', "value": 'PRESS', "shift": True}, None),
@@ -3639,7 +3652,7 @@ def km_grease_pencil_stroke_weight_mode(params):
{"properties": [("data_path_primary", 'tool_settings.gpencil_weight_paint.brush.size')]}),
# Display
*_grease_pencil_display(),
- # Keyframe menu
+ # Keyframe menu
("gpencil.blank_frame_add", {"type": 'I', "value": 'PRESS', "shift": True}, None),
("gpencil.active_frames_delete_all", {"type": 'X', "value": 'PRESS', "shift": True}, None),
("gpencil.active_frames_delete_all", {"type": 'DEL', "value": 'PRESS', "shift": True}, None),
@@ -3651,6 +3664,12 @@ def km_grease_pencil_stroke_weight_mode(params):
*_template_items_context_panel("VIEW3D_PT_gpencil_weight_context_menu", params.context_menu_event),
])
+ if params.select_mouse == 'LEFTMOUSE':
+ # Bone selection for combined weight paint + pose mode.
+ items.extend([
+ ("view3d.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, None),
+ ])
+
return keymap
@@ -3663,7 +3682,7 @@ def km_grease_pencil_stroke_weight_draw(_params):
)
items.extend([
- # Draw
+ # Draw
("gpencil.weight_paint", {"type": 'LEFTMOUSE', "value": 'PRESS'},
{"properties": [("wait_for_input", False)]}),
])
@@ -3692,7 +3711,7 @@ def km_grease_pencil_stroke_vertex_mode(params):
*_grease_pencil_display(),
# Tools
op_tool("builtin_brush.Draw", {"type": 'D', "value": 'PRESS'}),
- # Keyframe menu
+ # Keyframe menu
("gpencil.blank_frame_add", {"type": 'I', "value": 'PRESS', "shift": True}, None),
("gpencil.active_frames_delete_all", {"type": 'X', "value": 'PRESS', "shift": True}, None),
("gpencil.active_frames_delete_all", {"type": 'DEL', "value": 'PRESS', "shift": True}, None),
@@ -3879,7 +3898,6 @@ def km_pose(params):
items.extend([
("object.parent_set", {"type": 'P', "value": 'PRESS', "ctrl": True}, None),
- op_menu("VIEW3D_MT_add", {"type": 'A', "value": 'PRESS', "shift": True}),
("pose.hide", {"type": 'H', "value": 'PRESS'},
{"properties": [("unselected", False)]}),
("pose.hide", {"type": 'H', "value": 'PRESS', "shift": True},
@@ -3898,13 +3916,13 @@ def km_pose(params):
{"properties": [("flipped", True)]}),
*_template_items_select_actions(params, "pose.select_all"),
("pose.select_parent", {"type": 'P', "value": 'PRESS', "shift": True}, None),
- ("pose.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
+ ("pose.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'PARENT'), ("extend", False)]}),
- ("pose.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "shift": True},
+ ("pose.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'PARENT'), ("extend", True)]}),
- ("pose.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
+ ("pose.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'CHILD'), ("extend", False)]}),
- ("pose.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True},
+ ("pose.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'CHILD'), ("extend", True)]}),
("pose.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None),
("pose.select_linked_pick", {"type": 'L', "value": 'PRESS'}, None),
@@ -3921,7 +3939,7 @@ def km_pose(params):
("armature.layers_show_all", {"type": 'ACCENT_GRAVE', "value": 'PRESS', "ctrl": True}, None),
("armature.armature_layers", {"type": 'M', "value": 'PRESS', "shift": True}, None),
("pose.bone_layers", {"type": 'M', "value": 'PRESS'}, None),
- ("transform.bbone_resize", {"type": 'S', "value": 'PRESS', "ctrl": True, "alt": True, "repeat": False}, None),
+ ("transform.bbone_resize", {"type": 'S', "value": 'PRESS', "ctrl": True, "alt": True}, None),
("anim.keyframe_insert_menu", {"type": 'I', "value": 'PRESS'}, None),
("anim.keyframe_delete_v3d", {"type": 'I', "value": 'PRESS', "alt": True}, None),
("anim.keying_set_active_set", {"type": 'I', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None),
@@ -3959,17 +3977,17 @@ def km_object_mode(params):
("wm.context_toggle", {"type": 'O', "value": 'PRESS'},
{"properties": [("data_path", 'tool_settings.use_proportional_edit_objects')]}),
*_template_items_select_actions(params, "object.select_all"),
- ("object.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
- ("object.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
+ ("object.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("object.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("object.select_linked", {"type": 'L', "value": 'PRESS', "shift": True}, None),
("object.select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}, None),
- ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
+ ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'PARENT'), ("extend", False)]}),
- ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "shift": True},
+ ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'PARENT'), ("extend", True)]}),
- ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
+ ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'CHILD'), ("extend", False)]}),
- ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True},
+ ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'CHILD'), ("extend", True)]}),
("object.parent_set", {"type": 'P', "value": 'PRESS', "ctrl": True}, None),
("object.parent_clear", {"type": 'P', "value": 'PRESS', "alt": True}, None),
@@ -4067,10 +4085,10 @@ def km_paint_curve(params):
("paintcurve.delete_point", {"type": 'DEL', "value": 'PRESS'}, None),
("paintcurve.draw", {"type": 'RET', "value": 'PRESS'}, None),
("paintcurve.draw", {"type": 'NUMPAD_ENTER', "value": 'PRESS'}, None),
- ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None),
+ ("transform.translate", {"type": 'G', "value": 'PRESS'}, None),
("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None),
- ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None),
- ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None),
+ ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None),
+ ("transform.resize", {"type": 'S', "value": 'PRESS'}, None),
])
return keymap
@@ -4090,8 +4108,8 @@ def km_curve(params):
("curve.vertex_add", {"type": params.action_mouse, "value": 'CLICK', "ctrl": True}, None),
*_template_items_select_actions(params, "curve.select_all"),
("curve.select_row", {"type": 'R', "value": 'PRESS', "shift": True}, None),
- ("curve.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
- ("curve.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
+ ("curve.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("curve.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("curve.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None),
("curve.select_similar", {"type": 'G', "value": 'PRESS', "shift": True}, None),
("curve.select_linked_pick", {"type": 'L', "value": 'PRESS'},
@@ -4110,8 +4128,8 @@ def km_curve(params):
("curve.dissolve_verts", {"type": 'X', "value": 'PRESS', "ctrl": True}, None),
("curve.dissolve_verts", {"type": 'DEL', "value": 'PRESS', "ctrl": True}, None),
("curve.tilt_clear", {"type": 'T', "value": 'PRESS', "alt": True}, None),
- ("transform.tilt", {"type": 'T', "value": 'PRESS', "ctrl": True, "repeat": False}, None),
- ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True, "repeat": False},
+ ("transform.tilt", {"type": 'T', "value": 'PRESS', "ctrl": True}, None),
+ ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True},
{"properties": [("mode", 'CURVE_SHRINKFATTEN')]}),
("curve.reveal", {"type": 'H', "value": 'PRESS', "alt": True}, None),
("curve.hide", {"type": 'H', "value": 'PRESS'},
@@ -4194,9 +4212,9 @@ def km_image_paint(params):
("paint.brush_colors_flip", {"type": 'X', "value": 'PRESS'}, None),
("paint.grab_clone", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, None),
("paint.sample_color", {"type": 'S', "value": 'PRESS'}, None),
- ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 0.9)]}),
- ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 1.0 / 0.9)]}),
*_template_paint_radial_control("image_paint", color=True, zoom=True, rotation=True, secondary_rotation=True),
("brush.stencil_control", {"type": 'RIGHTMOUSE', "value": 'PRESS'},
@@ -4243,9 +4261,9 @@ def km_vertex_paint(params):
("paint.brush_colors_flip", {"type": 'X', "value": 'PRESS'}, None),
("paint.sample_color", {"type": 'S', "value": 'PRESS'}, None),
("paint.vertex_color_set", {"type": 'K', "value": 'PRESS', "shift": True}, None),
- ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 0.9)]}),
- ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 1.0 / 0.9)]}),
*_template_paint_radial_control("vertex_paint", color=True, rotation=True),
("brush.stencil_control", {"type": 'RIGHTMOUSE', "value": 'PRESS'},
@@ -4298,9 +4316,9 @@ def km_weight_paint(params):
("paint.weight_gradient", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True, "alt": True},
{"properties": [("type", 'RADIAL')]}),
("paint.weight_set", {"type": 'K', "value": 'PRESS', "shift": True}, None),
- ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 0.9)]}),
- ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 1.0 / 0.9)]}),
*_template_paint_radial_control("weight_paint"),
("wm.radial_control", {"type": 'F', "value": 'PRESS', "ctrl": True},
@@ -4313,7 +4331,7 @@ def km_weight_paint(params):
{"properties": [("data_path", 'weight_paint_object.data.use_paint_mask_vertex')]}),
("wm.context_toggle", {"type": 'S', "value": 'PRESS', "shift": True},
{"properties": [("data_path", 'tool_settings.weight_paint.brush.use_smooth_stroke')]}),
- op_menu_pie("VIEW3D_MT_wpaint_vgroup_lock_pie", {"type" : 'K', "value": 'PRESS'}),
+ op_menu_pie("VIEW3D_MT_wpaint_vgroup_lock_pie", {"type": 'K', "value": 'PRESS'}),
*_template_items_context_panel("VIEW3D_PT_paint_weight_context_menu", params.context_menu_event),
])
@@ -4323,7 +4341,6 @@ def km_weight_paint(params):
("view3d.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, None),
])
-
if params.legacy:
items.extend(_template_items_legacy_tools_from_numbers())
@@ -4339,6 +4356,8 @@ def km_sculpt(params):
)
items.extend([
+ # Switch Object (release to avoid conflict with grease pencil drawing).
+ ("object.switch_object", {"type": 'D', "value": 'RELEASE'}, None),
# Brush strokes
("sculpt.brush_stroke", {"type": 'LEFTMOUSE', "value": 'PRESS'},
{"properties": [("mode", 'NORMAL')]}),
@@ -4361,15 +4380,17 @@ def km_sculpt(params):
{"properties": [("mode", "SHRINK")]}),
# Subdivision levels
*_template_items_object_subdivision_set(),
- ("object.subdivision_set", {"type": 'PAGE_UP', "value": 'PRESS'},
+ ("object.subdivision_set", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
{"properties": [("level", 1), ("relative", True)]}),
- ("object.subdivision_set", {"type": 'PAGE_DOWN', "value": 'PRESS'},
+ ("object.subdivision_set", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True},
{"properties": [("level", -1), ("relative", True)]}),
# Mask
("paint.mask_flood_fill", {"type": 'M', "value": 'PRESS', "alt": True},
{"properties": [("mode", 'VALUE'), ("value", 0.0)]}),
("paint.mask_flood_fill", {"type": 'I', "value": 'PRESS', "ctrl": True},
{"properties": [("mode", 'INVERT')]}),
+ ("paint.mask_box_gesture", {"type": 'B', "value": 'PRESS'},
+ {"properties": [("mode", 'VALUE'), ("value", 0.0)]}),
("paint.mask_lasso_gesture", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "ctrl": True}, None),
("wm.context_toggle", {"type": 'M', "value": 'PRESS', "ctrl": True},
{"properties": [("data_path", 'scene.tool_settings.sculpt.show_mask')]}),
@@ -4379,7 +4400,7 @@ def km_sculpt(params):
{"properties": [("use_normals", True), ("keep_previous_mask", True), ("invert", False), ("smooth_iterations", 0), ("create_face_set", False)]}),
# Dynamic topology
("sculpt.dynamic_topology_toggle", {"type": 'D', "value": 'PRESS', "ctrl": True}, None),
- ("sculpt.set_detail_size", {"type": 'D', "value": 'PRESS', "shift": True}, None),
+ ("sculpt.dyntopo_detail_size_edit", {"type": 'D', "value": 'PRESS', "shift": True}, None),
# Remesh
("object.voxel_remesh", {"type": 'R', "value": 'PRESS', "ctrl": True}, None),
("object.voxel_size_edit", {"type": 'R', "value": 'PRESS', "shift": True}, None),
@@ -4387,9 +4408,9 @@ def km_sculpt(params):
# Color
("sculpt.sample_color", {"type": 'S', "value": 'PRESS'}, None),
# Brush properties
- ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 0.9)]}),
- ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 1.0 / 0.9)]}),
*_template_paint_radial_control("sculpt", rotation=True),
# Stencil
@@ -4434,8 +4455,9 @@ def km_sculpt(params):
("wm.context_toggle", {"type": 'S', "value": 'PRESS', "shift": True},
{"properties": [("data_path", 'tool_settings.sculpt.brush.use_smooth_stroke')]}),
op_menu("VIEW3D_MT_angle_control", {"type": 'R', "value": 'PRESS'}),
- op_menu_pie("VIEW3D_MT_sculpt_mask_edit_pie", {"type" : 'A', "value": 'PRESS'}),
- op_menu_pie("VIEW3D_MT_sculpt_face_sets_edit_pie", {"type" : 'W', "value": 'PRESS'}),
+ op_menu_pie("VIEW3D_MT_sculpt_mask_edit_pie", {"type": 'A', "value": 'PRESS'}),
+ op_menu_pie("VIEW3D_MT_sculpt_automasking_pie", {"type": 'A', "alt": True,"value": 'PRESS'}),
+ op_menu_pie("VIEW3D_MT_sculpt_face_sets_edit_pie", {"type": 'W', "value": 'PRESS'}),
*_template_items_context_panel("VIEW3D_PT_sculpt_context_menu", params.context_menu_event),
])
@@ -4455,11 +4477,13 @@ def km_mesh(params):
)
items.extend([
+ # Switch Object (release to avoid conflict with grease pencil drawing).
+ ("object.switch_object", {"type": 'D', "value": 'RELEASE'}, None),
# Tools.
("mesh.loopcut_slide", {"type": 'R', "value": 'PRESS', "ctrl": True},
- {"properties": [("TRANSFORM_OT_edge_slide", [("release_confirm", False), ],)]}),
+ {"properties": [("TRANSFORM_OT_edge_slide", [("release_confirm", False)],)]}),
("mesh.offset_edge_loops_slide", {"type": 'R', "value": 'PRESS', "shift": True, "ctrl": True},
- {"properties": [("TRANSFORM_OT_edge_slide", [("release_confirm", False), ],)]}),
+ {"properties": [("TRANSFORM_OT_edge_slide", [("release_confirm", False)],)]}),
("mesh.inset", {"type": 'I', "value": 'PRESS'}, None),
("mesh.bevel", {"type": 'B', "value": 'PRESS', "ctrl": True},
{"properties": [("affect", 'EDGES')]}),
@@ -4482,10 +4506,10 @@ def km_mesh(params):
("mesh.shortest_path_pick", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True},
{"properties": [("use_fill", True)]}),
*_template_items_select_actions(params, "mesh.select_all"),
- ("mesh.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
- ("mesh.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
- ("mesh.select_next_item", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "ctrl": True}, None),
- ("mesh.select_prev_item", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "ctrl": True}, None),
+ ("mesh.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("mesh.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("mesh.select_next_item", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, None),
+ ("mesh.select_prev_item", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, None),
("mesh.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None),
("mesh.select_linked_pick", {"type": 'L', "value": 'PRESS'},
{"properties": [("deselect", False)]}),
@@ -4506,7 +4530,7 @@ def km_mesh(params):
{"properties": [("inside", True)]}),
("view3d.edit_mesh_extrude_move_normal", {"type": 'E', "value": 'PRESS'}, None),
op_menu("VIEW3D_MT_edit_mesh_extrude", {"type": 'E', "value": 'PRESS', "alt": True}),
- ("transform.edge_crease", {"type": 'E', "value": 'PRESS', "shift": True, "repeat": False}, None),
+ ("transform.edge_crease", {"type": 'E', "value": 'PRESS', "shift": True}, None),
("mesh.fill", {"type": 'F', "value": 'PRESS', "alt": True}, None),
("mesh.quads_convert_to_tris", {"type": 'T', "value": 'PRESS', "ctrl": True},
{"properties": [("quad_method", 'BEAUTY'), ("ngon_method", 'BEAUTY')]}),
@@ -4514,13 +4538,13 @@ def km_mesh(params):
{"properties": [("quad_method", 'FIXED'), ("ngon_method", 'CLIP')]}),
("mesh.tris_convert_to_quads", {"type": 'J', "value": 'PRESS', "alt": True}, None),
("mesh.rip_move", {"type": 'V', "value": 'PRESS'},
- {"properties": [("MESH_OT_rip", [("use_fill", False), ],)]}),
+ {"properties": [("MESH_OT_rip", [("use_fill", False)],)]}),
("mesh.rip_move", {"type": 'V', "value": 'PRESS', "alt": True},
- {"properties": [("MESH_OT_rip", [("use_fill", True), ],)]}),
+ {"properties": [("MESH_OT_rip", [("use_fill", True)],)]}),
("mesh.rip_edge_move", {"type": 'D', "value": 'PRESS', "alt": True}, None),
op_menu("VIEW3D_MT_edit_mesh_merge", {"type": 'M', "value": 'PRESS'}),
op_menu("VIEW3D_MT_edit_mesh_split", {"type": 'M', "value": 'PRESS', "alt": True}),
- ("transform.shrink_fatten", {"type": 'S', "value": 'PRESS', "alt": True, "repeat": False}, None),
+ ("transform.shrink_fatten", {"type": 'S', "value": 'PRESS', "alt": True}, None),
("mesh.edge_face_add", {"type": 'F', "value": 'PRESS'}, None),
("mesh.duplicate_move", {"type": 'D', "value": 'PRESS', "shift": True}, None),
op_menu("VIEW3D_MT_mesh_add", {"type": 'A', "value": 'PRESS', "shift": True}),
@@ -4528,7 +4552,7 @@ def km_mesh(params):
("mesh.split", {"type": 'Y', "value": 'PRESS'}, None),
("mesh.vert_connect_path", {"type": 'J', "value": 'PRESS'}, None),
("mesh.point_normals", {"type": 'L', "value": 'PRESS', "alt": True}, None),
- ("transform.vert_slide", {"type": 'V', "value": 'PRESS', "shift": True, "repeat": False}, None),
+ ("transform.vert_slide", {"type": 'V', "value": 'PRESS', "shift": True}, None),
("mesh.dupli_extrude_cursor", {"type": params.action_mouse, "value": 'CLICK', "ctrl": True},
{"properties": [("rotate_source", True)]}),
("mesh.dupli_extrude_cursor", {"type": params.action_mouse, "value": 'CLICK', "shift": True, "ctrl": True},
@@ -4549,7 +4573,7 @@ def km_mesh(params):
op_menu("VIEW3D_MT_hook", {"type": 'H', "value": 'PRESS', "ctrl": True}),
op_menu("VIEW3D_MT_uv_map", {"type": 'U', "value": 'PRESS'}),
op_menu("VIEW3D_MT_vertex_group", {"type": 'G', "value": 'PRESS', "ctrl": True}),
- op_menu("VIEW3D_MT_edit_mesh_normals", {"type": 'N', "value": 'PRESS', "alt" : True}),
+ op_menu("VIEW3D_MT_edit_mesh_normals", {"type": 'N', "value": 'PRESS', "alt": True}),
("object.vertex_group_remove_from", {"type": 'G', "value": 'PRESS', "ctrl": True, "alt": True}, None),
*_template_items_proportional_editing(connected=True),
*_template_items_context_menu("VIEW3D_MT_edit_mesh_context_menu", params.context_menu_event),
@@ -4620,8 +4644,8 @@ def km_armature(params):
{"properties": [("direction", 'CHILD'), ("extend", False)]}),
("armature.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True},
{"properties": [("direction", 'CHILD'), ("extend", True)]}),
- ("armature.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
- ("armature.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
+ ("armature.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("armature.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("armature.select_similar", {"type": 'G', "value": 'PRESS', "shift": True}, None),
("armature.select_linked_pick", {"type": 'L', "value": 'PRESS'},
{"properties": [("deselect", False)]}),
@@ -4650,10 +4674,10 @@ def km_armature(params):
("armature.armature_layers", {"type": 'M', "value": 'PRESS', "shift": True}, None),
("armature.bone_layers", {"type": 'M', "value": 'PRESS'}, None),
# Special transforms.
- ("transform.bbone_resize", {"type": 'S', "value": 'PRESS', "ctrl": True, "alt": True, "repeat": False}, None),
- ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True, "repeat": False},
+ ("transform.bbone_resize", {"type": 'S', "value": 'PRESS', "ctrl": True, "alt": True}, None),
+ ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True},
{"properties": [("mode", 'BONE_ENVELOPE')]}),
- ("transform.transform", {"type": 'R', "value": 'PRESS', "ctrl": True, "repeat": False},
+ ("transform.transform", {"type": 'R', "value": 'PRESS', "ctrl": True},
{"properties": [("mode", 'BONE_ROLL')]}),
# Menus.
*_template_items_context_menu("VIEW3D_MT_armature_context_menu", params.context_menu_event),
@@ -4701,8 +4725,8 @@ def km_lattice(params):
items.extend([
*_template_items_select_actions(params, "lattice.select_all"),
- ("lattice.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
- ("lattice.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
+ ("lattice.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("lattice.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("object.vertex_parent_set", {"type": 'P', "value": 'PRESS', "ctrl": True}, None),
("lattice.flip", {"type": 'F', "value": 'PRESS', "alt": True}, None),
op_menu("VIEW3D_MT_hook", {"type": 'H', "value": 'PRESS', "ctrl": True}),
@@ -4724,8 +4748,8 @@ def km_particle(params):
items.extend([
*_template_items_select_actions(params, "particle.select_all"),
- ("particle.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
- ("particle.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
+ ("particle.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("particle.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("particle.select_linked_pick", {"type": 'L', "value": 'PRESS'},
{"properties": [("deselect", False)]}),
("particle.select_linked_pick", {"type": 'L', "value": 'PRESS', "shift": True},
@@ -4777,71 +4801,71 @@ def km_font(params):
{"properties": [("style", 'UNDERLINE')]}),
("font.style_toggle", {"type": 'P', "value": 'PRESS', "ctrl": True},
{"properties": [("style", 'SMALL_CAPS')]}),
- ("font.delete", {"type": 'DEL', "value": 'PRESS'},
+ ("font.delete", {"type": 'DEL', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_OR_SELECTION')]}),
- ("font.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True},
+ ("font.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
- ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS'},
+ ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_OR_SELECTION')]}),
- ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True},
+ ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_OR_SELECTION')]}),
- ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True},
+ ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
("font.move", {"type": 'HOME', "value": 'PRESS'},
{"properties": [("type", 'LINE_BEGIN')]}),
("font.move", {"type": 'END', "value": 'PRESS'},
{"properties": [("type", 'LINE_END')]}),
- ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS'},
+ ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS'},
+ ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_CHARACTER')]}),
- ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True},
+ ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
- ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True},
+ ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
- ("font.move", {"type": 'UP_ARROW', "value": 'PRESS'},
+ ("font.move", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_LINE')]}),
- ("font.move", {"type": 'DOWN_ARROW', "value": 'PRESS'},
+ ("font.move", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_LINE')]}),
- ("font.move", {"type": 'PAGE_UP', "value": 'PRESS'},
+ ("font.move", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_PAGE')]}),
- ("font.move", {"type": 'PAGE_DOWN', "value": 'PRESS'},
+ ("font.move", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_PAGE')]}),
("font.move_select", {"type": 'HOME', "value": 'PRESS', "shift": True},
{"properties": [("type", 'LINE_BEGIN')]}),
("font.move_select", {"type": 'END', "value": 'PRESS', "shift": True},
{"properties": [("type", 'LINE_END')]}),
- ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True},
+ ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True},
+ ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'NEXT_CHARACTER')]}),
- ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
- ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
- ("font.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True},
+ ("font.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_LINE')]}),
- ("font.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True},
+ ("font.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'NEXT_LINE')]}),
- ("font.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True},
+ ("font.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_PAGE')]}),
- ("font.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True},
+ ("font.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'NEXT_PAGE')]}),
- ("font.change_spacing", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True},
+ ("font.change_spacing", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("delta", -1)]}),
- ("font.change_spacing", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True},
+ ("font.change_spacing", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("delta", 1)]}),
- ("font.change_character", {"type": 'UP_ARROW', "value": 'PRESS', "alt": True},
+ ("font.change_character", {"type": 'UP_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("delta", 1)]}),
- ("font.change_character", {"type": 'DOWN_ARROW', "value": 'PRESS', "alt": True},
+ ("font.change_character", {"type": 'DOWN_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("delta", -1)]}),
("font.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, None),
("font.text_copy", {"type": 'C', "value": 'PRESS', "ctrl": True}, None),
("font.text_cut", {"type": 'X', "value": 'PRESS', "ctrl": True}, None),
- ("font.text_paste", {"type": 'V', "value": 'PRESS', "ctrl": True}, None),
- ("font.line_break", {"type": 'RET', "value": 'PRESS'}, None),
- ("font.text_insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None),
- ("font.text_insert", {"type": 'BACK_SPACE', "value": 'PRESS', "alt": True},
+ ("font.text_paste", {"type": 'V', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("font.line_break", {"type": 'RET', "value": 'PRESS', "repeat": True}, None),
+ ("font.text_insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True, "repeat": True}, None),
+ ("font.text_insert", {"type": 'BACK_SPACE', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("accent", True)]}),
*_template_items_context_menu("VIEW3D_MT_edit_font_context_menu", params.context_menu_event),
])
@@ -4958,28 +4982,28 @@ def km_transform_modal_map(_params):
("CONFIRM", {"type": 'SPACE', "value": 'PRESS', "any": True}, None),
("CANCEL", {"type": 'RIGHTMOUSE', "value": 'PRESS', "any": True}, None),
("CANCEL", {"type": 'ESC', "value": 'PRESS', "any": True}, None),
- ("AXIS_X", {"type": 'X', "value": 'PRESS', "repeat": False}, None),
- ("AXIS_Y", {"type": 'Y', "value": 'PRESS', "repeat": False}, None),
- ("AXIS_Z", {"type": 'Z', "value": 'PRESS', "repeat": False}, None),
- ("PLANE_X", {"type": 'X', "value": 'PRESS', "shift": True, "repeat": False}, None),
- ("PLANE_Y", {"type": 'Y', "value": 'PRESS', "shift": True, "repeat": False}, None),
- ("PLANE_Z", {"type": 'Z', "value": 'PRESS', "shift": True, "repeat": False}, None),
- ("CONS_OFF", {"type": 'C', "value": 'PRESS', "repeat": False}, None),
- ("TRANSLATE", {"type": 'G', "value": 'PRESS', "repeat": False}, None),
- ("ROTATE", {"type": 'R', "value": 'PRESS', "repeat": False}, None),
- ("RESIZE", {"type": 'S', "value": 'PRESS', "repeat": False}, None),
- ("SNAP_TOGGLE", {"type": 'TAB', "value": 'PRESS', "shift": True, "repeat": False}, None),
+ ("AXIS_X", {"type": 'X', "value": 'PRESS'}, None),
+ ("AXIS_Y", {"type": 'Y', "value": 'PRESS'}, None),
+ ("AXIS_Z", {"type": 'Z', "value": 'PRESS'}, None),
+ ("PLANE_X", {"type": 'X', "value": 'PRESS', "shift": True}, None),
+ ("PLANE_Y", {"type": 'Y', "value": 'PRESS', "shift": True}, None),
+ ("PLANE_Z", {"type": 'Z', "value": 'PRESS', "shift": True}, None),
+ ("CONS_OFF", {"type": 'C', "value": 'PRESS'}, None),
+ ("TRANSLATE", {"type": 'G', "value": 'PRESS'}, None),
+ ("ROTATE", {"type": 'R', "value": 'PRESS'}, None),
+ ("RESIZE", {"type": 'S', "value": 'PRESS'}, None),
+ ("SNAP_TOGGLE", {"type": 'TAB', "value": 'PRESS', "shift": True}, None),
("SNAP_INV_ON", {"type": 'LEFT_CTRL', "value": 'PRESS', "any": True}, None),
("SNAP_INV_OFF", {"type": 'LEFT_CTRL', "value": 'RELEASE', "any": True}, None),
("SNAP_INV_ON", {"type": 'RIGHT_CTRL', "value": 'PRESS', "any": True}, None),
("SNAP_INV_OFF", {"type": 'RIGHT_CTRL', "value": 'RELEASE', "any": True}, None),
- ("ADD_SNAP", {"type": 'A', "value": 'PRESS', "repeat": False}, None),
- ("ADD_SNAP", {"type": 'A', "value": 'PRESS', "ctrl": True, "repeat": False}, None),
- ("REMOVE_SNAP", {"type": 'A', "value": 'PRESS', "alt": True, "repeat": False}, None),
- ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS'}, None),
- ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS'}, None),
- ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True}, None),
- ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True}, None),
+ ("ADD_SNAP", {"type": 'A', "value": 'PRESS'}, None),
+ ("ADD_SNAP", {"type": 'A', "value": 'PRESS', "ctrl": True}, None),
+ ("REMOVE_SNAP", {"type": 'A', "value": 'PRESS', "alt": True}, None),
+ ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, None),
+ ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, None),
+ ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True}, None),
+ ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True}, None),
("PROPORTIONAL_SIZE_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, None),
("PROPORTIONAL_SIZE_DOWN", {"type": 'WHEELUPMOUSE', "value": 'PRESS'}, None),
("PROPORTIONAL_SIZE_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "shift": True}, None),
@@ -4987,17 +5011,17 @@ def km_transform_modal_map(_params):
("PROPORTIONAL_SIZE", {"type": 'TRACKPADPAN', "value": 'ANY'}, None),
("EDGESLIDE_EDGE_NEXT", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "alt": True}, None),
("EDGESLIDE_PREV_NEXT", {"type": 'WHEELUPMOUSE', "value": 'PRESS', "alt": True}, None),
- ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS'}, None),
- ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS'}, None),
- ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True}, None),
- ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True}, None),
+ ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, None),
+ ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, None),
+ ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True}, None),
+ ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True}, None),
("AUTOIK_CHAIN_LEN_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, None),
("AUTOIK_CHAIN_LEN_DOWN", {"type": 'WHEELUPMOUSE', "value": 'PRESS'}, None),
("AUTOIK_CHAIN_LEN_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "shift": True}, None),
("AUTOIK_CHAIN_LEN_DOWN", {"type": 'WHEELUPMOUSE', "value": 'PRESS', "shift": True}, None),
- ("INSERTOFS_TOGGLE_DIR", {"type": 'T', "value": 'PRESS', "repeat": False}, None),
- ("AUTOCONSTRAIN", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "repeat": False}, None),
- ("AUTOCONSTRAIN", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "repeat": False, "shift": True}, None),
+ ("INSERTOFS_TOGGLE_DIR", {"type": 'T', "value": 'PRESS'}, None),
+ ("AUTOCONSTRAIN", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None),
+ ("AUTOCONSTRAINPLANE", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "shift": True}, None),
])
return keymap
@@ -5050,9 +5074,9 @@ def km_view3d_gesture_circle(_params):
("DESELECT", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None),
("NOP", {"type": 'MIDDLEMOUSE', "value": 'RELEASE', "any": True}, None),
("SUBTRACT", {"type": 'WHEELUPMOUSE', "value": 'PRESS'}, None),
- ("SUBTRACT", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None),
+ ("SUBTRACT", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None),
("ADD", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, None),
- ("ADD", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None),
+ ("ADD", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None),
("SIZE", {"type": 'TRACKPADPAN', "value": 'ANY'}, None),
])
@@ -5077,6 +5101,7 @@ def km_gesture_border(_params):
("SELECT", {"type": 'LEFTMOUSE', "value": 'RELEASE', "any": True}, None),
("BEGIN", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None),
("DESELECT", {"type": 'MIDDLEMOUSE', "value": 'RELEASE'}, None),
+ ("MOVE", {"type": 'SPACE', "value": 'ANY', "any": True}, None),
])
return keymap
@@ -5115,6 +5140,24 @@ def km_gesture_straight_line(_params):
("CANCEL", {"type": 'RIGHTMOUSE', "value": 'ANY', "any": True}, None),
("BEGIN", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None),
("SELECT", {"type": 'LEFTMOUSE', "value": 'RELEASE', "any": True}, None),
+ ("MOVE", {"type": 'SPACE', "value": 'ANY', "any": True}, None),
+ ("SNAP", {"type": 'LEFT_CTRL', "value": 'ANY', "any": True}, None),
+ ("FLIP", {"type": 'F', "value": 'PRESS', "any": True}, None),
+ ])
+
+ return keymap
+
+
+def km_gesture_lasso(_params):
+ items = []
+ keymap = (
+ "Gesture Lasso",
+ {"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
+ {"items": items},
+ )
+
+ items.extend([
+ ("MOVE", {"type": 'SPACE', "value": 'ANY', "any": True}, None),
])
return keymap
@@ -5252,25 +5295,25 @@ def km_view3d_fly_modal(_params):
("CONFIRM", {"type": 'RET', "value": 'PRESS', "any": True}, None),
("CONFIRM", {"type": 'SPACE', "value": 'PRESS', "any": True}, None),
("CONFIRM", {"type": 'NUMPAD_ENTER', "value": 'PRESS', "any": True}, None),
- ("ACCELERATE", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "any": True}, None),
- ("DECELERATE", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "any": True}, None),
+ ("ACCELERATE", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "any": True, "repeat": True}, None),
+ ("DECELERATE", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "any": True, "repeat": True}, None),
("ACCELERATE", {"type": 'WHEELUPMOUSE', "value": 'PRESS', "any": True}, None),
("DECELERATE", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "any": True}, None),
("CONFIRM", {"type": 'TRACKPADPAN', "value": 'ANY'}, None),
("PAN_ENABLE", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "any": True}, None),
("PAN_DISABLE", {"type": 'MIDDLEMOUSE', "value": 'RELEASE', "any": True}, None),
- ("FORWARD", {"type": 'W', "value": 'PRESS'}, None),
- ("BACKWARD", {"type": 'S', "value": 'PRESS'}, None),
- ("LEFT", {"type": 'A', "value": 'PRESS'}, None),
- ("RIGHT", {"type": 'D', "value": 'PRESS'}, None),
- ("UP", {"type": 'E', "value": 'PRESS'}, None),
- ("DOWN", {"type": 'Q', "value": 'PRESS'}, None),
- ("UP", {"type": 'R', "value": 'PRESS'}, None),
- ("DOWN", {"type": 'F', "value": 'PRESS'}, None),
- ("FORWARD", {"type": 'UP_ARROW', "value": 'PRESS'}, None),
- ("BACKWARD", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None),
- ("LEFT", {"type": 'LEFT_ARROW', "value": 'PRESS'}, None),
- ("RIGHT", {"type": 'RIGHT_ARROW', "value": 'PRESS'}, None),
+ ("FORWARD", {"type": 'W', "value": 'PRESS', "repeat": True}, None),
+ ("BACKWARD", {"type": 'S', "value": 'PRESS', "repeat": True}, None),
+ ("LEFT", {"type": 'A', "value": 'PRESS', "repeat": True}, None),
+ ("RIGHT", {"type": 'D', "value": 'PRESS', "repeat": True}, None),
+ ("UP", {"type": 'E', "value": 'PRESS', "repeat": True}, None),
+ ("DOWN", {"type": 'Q', "value": 'PRESS', "repeat": True}, None),
+ ("UP", {"type": 'R', "value": 'PRESS', "repeat": True}, None),
+ ("DOWN", {"type": 'F', "value": 'PRESS', "repeat": True}, None),
+ ("FORWARD", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None),
+ ("BACKWARD", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None),
+ ("LEFT", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True}, None),
+ ("RIGHT", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True}, None),
("AXIS_LOCK_X", {"type": 'X', "value": 'PRESS'}, None),
("AXIS_LOCK_Z", {"type": 'Z', "value": 'PRESS'}, None),
("PRECISION_ENABLE", {"type": 'LEFT_ALT', "value": 'PRESS', "any": True}, None),
@@ -5328,8 +5371,8 @@ def km_view3d_walk_modal(_params):
("JUMP_STOP", {"type": 'V', "value": 'RELEASE', "any": True}, None),
("TELEPORT", {"type": 'SPACE', "value": 'PRESS', "any": True}, None),
("TELEPORT", {"type": 'MIDDLEMOUSE', "value": 'ANY', "any": True}, None),
- ("ACCELERATE", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "any": True}, None),
- ("DECELERATE", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "any": True}, None),
+ ("ACCELERATE", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "any": True, "repeat": True}, None),
+ ("DECELERATE", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "any": True, "repeat": True}, None),
("ACCELERATE", {"type": 'WHEELUPMOUSE', "value": 'PRESS', "any": True}, None),
("DECELERATE", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "any": True}, None),
])
@@ -5457,7 +5500,7 @@ def km_generic_gizmo_maybe_drag(params):
_template_items_gizmo_tweak_value_drag()
if params.use_gizmo_drag else
_template_items_gizmo_tweak_value()
- },
+ },
)
return keymap
@@ -5649,9 +5692,9 @@ def km_image_editor_tool_uv_sculpt_stroke(params):
{"properties": [("mode", 'INVERT')]}),
("sculpt.uv_sculpt_stroke", {"type": params.tool_mouse, "value": 'PRESS', "shift": True},
{"properties": [("mode", 'RELAX')]}),
- ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 0.9)]}),
- ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 1.0 / 0.9)]}),
*_template_paint_radial_control("uv_sculpt"),
]},
@@ -5723,6 +5766,7 @@ def km_node_editor_tool_select_lasso(params):
)},
)
+
def km_node_editor_tool_select_circle(params):
return (
"Node Tool: Select Circle",
@@ -5733,6 +5777,7 @@ def km_node_editor_tool_select_circle(params):
)},
)
+
def km_node_editor_tool_links_cut(params):
return (
"Node Tool: Links Cut",
@@ -5971,6 +6016,7 @@ def km_3d_view_tool_edit_mesh_extrude_region(params):
]},
)
+
def km_3d_view_tool_edit_mesh_extrude_manifold(params):
return (
"3D View Tool: Edit Mesh, Extrude Manifold",
@@ -5985,10 +6031,11 @@ def km_3d_view_tool_edit_mesh_extrude_manifold(params):
("constraint_axis", (False, False, True)),
("orient_type", 'NORMAL'),
]),
- ]}),
+ ]}),
]},
)
+
def km_3d_view_tool_edit_mesh_extrude_along_normals(params):
return (
"3D View Tool: Edit Mesh, Extrude Along Normals",
@@ -6251,6 +6298,7 @@ def km_3d_view_tool_edit_curve_radius(params):
]},
)
+
def km_3d_view_tool_edit_curve_randomize(params):
return (
"3D View Tool: Edit Curve, Randomize",
@@ -6261,6 +6309,7 @@ def km_3d_view_tool_edit_curve_randomize(params):
]},
)
+
def km_3d_view_tool_edit_curve_extrude(params):
return (
"3D View Tool: Edit Curve, Extrude",
@@ -6322,6 +6371,7 @@ def km_3d_view_tool_sculpt_lasso_mask(params):
]},
)
+
def km_3d_view_tool_sculpt_box_face_set(params):
return (
"3D View Tool: Sculpt, Box Face Set",
@@ -6332,6 +6382,7 @@ def km_3d_view_tool_sculpt_box_face_set(params):
]},
)
+
def km_3d_view_tool_sculpt_lasso_face_set(params):
return (
"3D View Tool: Sculpt, Lasso Face Set",
@@ -6341,7 +6392,8 @@ def km_3d_view_tool_sculpt_lasso_face_set(params):
None),
]},
)
-
+
+
def km_3d_view_tool_sculpt_box_trim(params):
return (
"3D View Tool: Sculpt, Box Trim",
@@ -6352,6 +6404,7 @@ def km_3d_view_tool_sculpt_box_trim(params):
]},
)
+
def km_3d_view_tool_sculpt_lasso_trim(params):
return (
"3D View Tool: Sculpt, Lasso Trim",
@@ -6362,6 +6415,31 @@ def km_3d_view_tool_sculpt_lasso_trim(params):
]},
)
+
+def km_3d_view_tool_sculpt_line_mask(params):
+ return (
+ "3D View Tool: Sculpt, Line Mask",
+ {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
+ {"items": [
+ ("paint.mask_line_gesture", {"type": params.tool_tweak, "value": 'ANY'},
+ {"properties": [("value", 1.0)]}),
+ ("paint.mask_line_gesture", {"type": params.tool_tweak, "value": 'ANY', "ctrl": True},
+ {"properties": [("value", 0.0)]}),
+ ]},
+ )
+
+
+def km_3d_view_tool_sculpt_line_project(params):
+ return (
+ "3D View Tool: Sculpt, Line Project",
+ {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
+ {"items": [
+ ("sculpt.project_line_gesture", {"type": params.tool_tweak, "value": 'ANY'},
+ None),
+ ]},
+ )
+
+
def km_3d_view_tool_sculpt_mesh_filter(params):
return (
"3D View Tool: Sculpt, Mesh Filter",
@@ -6372,6 +6450,7 @@ def km_3d_view_tool_sculpt_mesh_filter(params):
]},
)
+
def km_3d_view_tool_sculpt_cloth_filter(params):
return (
"3D View Tool: Sculpt, Cloth Filter",
@@ -6382,6 +6461,7 @@ def km_3d_view_tool_sculpt_cloth_filter(params):
]},
)
+
def km_3d_view_tool_sculpt_color_filter(params):
return (
"3D View Tool: Sculpt, Color Filter",
@@ -6392,6 +6472,7 @@ def km_3d_view_tool_sculpt_color_filter(params):
]},
)
+
def km_3d_view_tool_sculpt_mask_by_color(params):
return (
"3D View Tool: Sculpt, Mask By Color",
@@ -6404,18 +6485,18 @@ def km_3d_view_tool_sculpt_mask_by_color(params):
]},
)
+
def km_3d_view_tool_sculpt_face_set_edit(params):
return (
"3D View Tool: Sculpt, Face Set Edit",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": [
- ("sculpt.face_set_edit", {"type": params.tool_mouse, "value": 'ANY'},
+ ("sculpt.face_set_edit", {"type": params.tool_mouse, "value": 'PRESS'},
None),
- ("sculpt.face_set_edit", {"type": params.tool_tweak, "value": 'ANY'},
- None)
]},
)
+
def km_3d_view_tool_paint_weight_sample_weight(params):
return (
"3D View Tool: Paint Weight, Sample Weight",
@@ -6462,6 +6543,7 @@ def km_3d_view_tool_paint_gpencil_line(params):
]},
)
+
def km_3d_view_tool_paint_gpencil_polyline(params):
return (
"3D View Tool: Paint Gpencil, Polyline",
@@ -6476,6 +6558,7 @@ def km_3d_view_tool_paint_gpencil_polyline(params):
]},
)
+
def km_3d_view_tool_paint_gpencil_box(params):
return (
"3D View Tool: Paint Gpencil, Box",
@@ -6520,7 +6603,7 @@ def km_3d_view_tool_paint_gpencil_arc(params):
("gpencil.primitive_curve", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True},
{"properties": [("type", 'ARC'), ("wait_for_input", False)]}),
("gpencil.primitive_curve", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True},
- {"properties": [("type",'ARC'), ("wait_for_input", False)]}),
+ {"properties": [("type", 'ARC'), ("wait_for_input", False)]}),
# Lasso select
("gpencil.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True}, None),
]},
@@ -6722,7 +6805,7 @@ def km_sequencer_editor_tool_select_box(params):
),
# RMB select can already set the frame, match the tweak tool.
*(_template_items_change_frame(params)
- if params.select_mouse == 'LEFTMOUSE' else []),
+ if params.select_mouse == 'LEFTMOUSE' else []),
]},
)
@@ -6858,6 +6941,7 @@ def generate_keymaps(params=None):
km_gesture_border(params),
km_gesture_zoom_border(params),
km_gesture_straight_line(params),
+ km_gesture_lasso(params),
km_standard_modal_map(params),
km_knife_tool_modal_map(params),
km_custom_normals_modal_map(params),
@@ -6959,6 +7043,8 @@ def generate_keymaps(params=None):
km_3d_view_tool_sculpt_lasso_face_set(params),
km_3d_view_tool_sculpt_box_trim(params),
km_3d_view_tool_sculpt_lasso_trim(params),
+ km_3d_view_tool_sculpt_line_mask(params),
+ km_3d_view_tool_sculpt_line_project(params),
km_3d_view_tool_sculpt_mesh_filter(params),
km_3d_view_tool_sculpt_cloth_filter(params),
km_3d_view_tool_sculpt_color_filter(params),
diff --git a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
index bb921565374..c79a59145cf 100644
--- a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
+++ b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
@@ -237,7 +237,7 @@ def km_screen(params):
)
items.extend([
- ("screen.repeat_last", {"type": 'G', "value": 'PRESS'}, None),
+ ("screen.repeat_last", {"type": 'G', "value": 'PRESS', "repeat": True}, None),
# Animation
("screen.userpref_show", {"type": 'COMMA', "value": 'PRESS', "ctrl": True}, None),
("screen.animation_step", {"type": 'TIMER0', "value": 'ANY', "any": True}, None),
@@ -256,8 +256,8 @@ def km_screen(params):
("file.execute", {"type": 'NUMPAD_ENTER', "value": 'PRESS'}, None),
("file.cancel", {"type": 'ESC', "value": 'PRESS'}, None),
# Undo
- ("ed.undo", {"type": 'Z', "value": 'PRESS', "ctrl": True}, None),
- ("ed.redo", {"type": 'Z', "value": 'PRESS', "shift": True, "ctrl": True}, None),
+ ("ed.undo", {"type": 'Z', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("ed.redo", {"type": 'Z', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, None),
("ed.undo_history", {"type": 'Z', "value": 'PRESS', "alt": True, "ctrl": True}, None),
# Render
("render.view_cancel", {"type": 'ESC', "value": 'PRESS'}, None),
@@ -344,8 +344,8 @@ def km_view2d(params):
("view2d.zoom_in", {"type": 'WHEELINMOUSE', "value": 'PRESS'}, None),
("view2d.zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS', "alt": True}, None),
("view2d.zoom_in", {"type": 'WHEELINMOUSE', "value": 'PRESS', "alt": True}, None),
- ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None),
- ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None),
+ ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None),
+ ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None),
("view2d.zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None),
("view2d.smoothview", {"type": 'TIMER1', "value": 'ANY', "any": True}, None),
# Scroll up/down, only when zoom is not available.
@@ -379,16 +379,16 @@ def km_view2d_buttons_list(params):
("view2d.pan", {"type": 'TRACKPADPAN', "value": 'ANY'}, None),
("view2d.scroll_down", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, None),
("view2d.scroll_up", {"type": 'WHEELUPMOUSE', "value": 'PRESS'}, None),
- ("view2d.scroll_down", {"type": 'PAGE_DOWN', "value": 'PRESS'},
+ ("view2d.scroll_down", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True},
{"properties": [("page", True)]}),
- ("view2d.scroll_up", {"type": 'PAGE_UP', "value": 'PRESS'},
+ ("view2d.scroll_up", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
{"properties": [("page", True)]}),
# Zoom
("view2d.zoom", {"type": 'RIGHTMOUSE', "value": 'PRESS', "alt": True}, None),
("view2d.zoom", {"type": 'TRACKPADZOOM', "value": 'ANY'}, None),
("view2d.zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None),
- ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None),
- ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None),
+ ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None),
+ ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None),
("view2d.reset", {"type": 'A', "value": 'PRESS'}, None),
])
@@ -462,7 +462,8 @@ def km_outliner(params):
items.extend([
("outliner.item_rename", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, None),
- ("outliner.item_rename", {"type": 'RET', "value": 'PRESS'}, None),
+ ("outliner.item_rename", {"type": 'RET', "value": 'PRESS'},
+ {"properties": [("use_active", True)]}),
("wm.search_menu", {"type": 'TAB', "value": 'PRESS'}, None),
("outliner.highlight_update", {"type": 'MOUSEMOVE', "value": 'ANY', "any": True}, None),
("outliner.item_activate", {"type": 'LEFTMOUSE', "value": 'CLICK'},
@@ -478,17 +479,21 @@ def km_outliner(params):
{"properties": [("tweak", True), ("mode", "ADD")]}),
("outliner.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "ctrl": True},
{"properties": [("tweak", True), ("mode", "SUB")]}),
- ("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'UP')]}),
- ("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True},
+ ("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},
{"properties": [("direction", 'UP'), ("extend", True)]}),
- ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'DOWN')]}),
- ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True},
+ ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True},
+ {"properties": [("direction", 'DOWN')]}),
+ ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'DOWN'), ("extend", True)]}),
- ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'LEFT')]}),
- ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True},
+ ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True},
+ {"properties": [("direction", 'LEFT')]}),
+ ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'LEFT'), ("toggle_all", True)]}),
- ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'RIGHT')]}),
- ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True},
+ ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True},
+ {"properties": [("direction", 'RIGHT')]}),
+ ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'RIGHT'), ("toggle_all", True)]}),
("outliner.item_openclose", {"type": 'LEFTMOUSE', "value": 'CLICK'},
{"properties": [("all", False)]}),
@@ -504,9 +509,9 @@ def km_outliner(params):
("outliner.show_hierarchy", {"type": 'A', "value": 'PRESS'}, None),
("outliner.show_active", {"type": 'PERIOD', "value": 'PRESS'}, None),
("outliner.show_active", {"type": 'F', "value": 'PRESS'}, None),
- ("outliner.scroll_page", {"type": 'PAGE_DOWN', "value": 'PRESS'},
+ ("outliner.scroll_page", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True},
{"properties": [("up", False)]}),
- ("outliner.scroll_page", {"type": 'PAGE_UP', "value": 'PRESS'},
+ ("outliner.scroll_page", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
{"properties": [("up", True)]}),
("outliner.show_one_level", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None),
("outliner.show_one_level", {"type": 'NUMPAD_MINUS', "value": 'PRESS'},
@@ -569,8 +574,8 @@ def km_uv_editor(params):
("uv.select_loop", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'},
{"properties": [("extend", False)]}),
("uv.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None),
- ("uv.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None),
- ("uv.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None),
+ ("uv.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None),
+ ("uv.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None),
("uv.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'SELECT')]}),
("uv.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}),
("uv.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}),
@@ -648,9 +653,9 @@ def km_view3d(params):
("view3d.zoom", {"type": 'TRACKPADZOOM', "value": 'ANY'}, None),
("view3d.zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None),
# Numpad
- ("view3d.zoom", {"type": 'NUMPAD_PLUS', "value": 'PRESS'},
+ ("view3d.zoom", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True},
{"properties": [("delta", 1)]}),
- ("view3d.zoom", {"type": 'NUMPAD_MINUS', "value": 'PRESS'},
+ ("view3d.zoom", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True},
{"properties": [("delta", -1)]}),
("view3d.zoom", {"type": 'WHEELINMOUSE', "value": 'PRESS'},
{"properties": [("delta", 1)]}),
@@ -660,9 +665,9 @@ def km_view3d(params):
{"properties": [("delta", 1)]}),
("view3d.zoom", {"type": 'WHEELOUTMOUSE', "value": 'PRESS', "alt": True},
{"properties": [("delta", -1)]}),
- ("view3d.dolly", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True},
+ ("view3d.dolly", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("delta", 1)]}),
- ("view3d.dolly", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True},
+ ("view3d.dolly", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("delta", -1)]}),
("view3d.view_all", {"type": 'A', "value": 'PRESS'},
{"properties": [("center", False)]}),
@@ -776,8 +781,8 @@ def km_mask_editing(params):
{"properties": [("mode", 'ADD')]}),
("mask.select_lasso", {"type": params.action_tweak, "value": 'ANY', "shift": True, "ctrl": True, "alt": True},
{"properties": [("mode", 'SUB')]}),
- ("mask.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None),
- ("mask.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None),
+ ("mask.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None),
+ ("mask.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None),
("mask.hide_view_clear", {"type": 'H', "value": 'PRESS', "alt": True}, None),
("mask.hide_view_set", {"type": 'H', "value": 'PRESS', "ctrl": True},
{"properties": [("unselected", False)]}),
@@ -902,8 +907,8 @@ def km_graph_editor(params):
{"properties":[("tweak", True), ("axis_range", False), ("mode", 'ADD')]}),
("graph.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "ctrl": True},
{"properties":[("tweak", True), ("axis_range", False), ("mode", 'SUB')]}),
- ("graph.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None),
- ("graph.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None),
+ ("graph.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None),
+ ("graph.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None),
("graph.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None),
op_menu("GRAPH_MT_delete", {"type": 'BACK_SPACE', "value": 'PRESS'}),
op_menu("GRAPH_MT_delete", {"type": 'DEL', "value": 'PRESS'}),
@@ -981,8 +986,8 @@ def km_image(params):
("image.view_zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS'}, None),
("image.view_zoom_in", {"type": 'WHEELINMOUSE', "value": 'PRESS', "alt": True}, None),
("image.view_zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS', "alt": True}, None),
- ("image.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None),
- ("image.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None),
+ ("image.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None),
+ ("image.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None),
("image.view_zoom", {"type": 'RIGHTMOUSE', "value": 'PRESS', "alt": True}, None),
("image.view_zoom", {"type": 'TRACKPADZOOM', "value": 'ANY'}, None),
("image.view_zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None),
@@ -1212,17 +1217,17 @@ def km_file_browser(params):
("wm.context_toggle", {"type": 'T', "value": 'PRESS'},
{"properties": [("data_path", 'space_data.show_region_toolbar')]}),
("file.bookmark_add", {"type": 'B', "value": 'PRESS', "ctrl": True}, None),
- ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS'},
+ ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True},
{"properties": [("increment", 1)]}),
- ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True},
+ ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("increment", 10)]}),
- ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True},
+ ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("increment", 100)]}),
- ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS'},
+ ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True},
{"properties": [("increment", -1)]}),
- ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True},
+ ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("increment", -10)]}),
- ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True},
+ ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("increment", -100)]}),
*_template_items_context_menu("FILEBROWSER_MT_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}),
])
@@ -1300,17 +1305,17 @@ def km_file_browser_buttons(params):
)
items.extend([
- ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS'},
+ ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True},
{"properties": [("increment", 1)]}),
- ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True},
+ ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("increment", 10)]}),
- ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True},
+ ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("increment", 100)]}),
- ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS'},
+ ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True},
{"properties": [("increment", -1)]}),
- ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True},
+ ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("increment", -10)]}),
- ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True},
+ ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("increment", -100)]}),
])
@@ -1384,8 +1389,8 @@ def km_dopesheet(params):
{"properties": [("mode", 'MARKERS_COLUMN')]}),
("action.select_column", {"type": 'K', "value": 'PRESS', "alt": True},
{"properties": [("mode", 'MARKERS_BETWEEN')]}),
- ("action.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "ctrl": True}, None),
- ("action.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "ctrl": True}, None),
+ ("action.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
+ ("action.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("action.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None),
("action.frame_jump", {"type": 'G', "value": 'PRESS', "ctrl": True}, None),
("wm.context_menu_enum", {"type": 'X', "value": 'PRESS'},
@@ -1583,9 +1588,9 @@ def km_text(params):
{"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}),
("wm.context_cycle_int", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "ctrl": True},
{"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}),
- ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True},
+ ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}),
- ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True},
+ ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}),
("text.new", {"type": 'N', "value": 'PRESS', "ctrl": True}, None),
])
@@ -1598,20 +1603,20 @@ def km_text(params):
("text.run_script", {"type": 'P', "value": 'PRESS', "alt": True}, None),
("text.cut", {"type": 'X', "value": 'PRESS', "ctrl": True}, None),
("text.copy", {"type": 'C', "value": 'PRESS', "ctrl": True}, None),
- ("text.paste", {"type": 'V', "value": 'PRESS', "ctrl": True}, None),
+ ("text.paste", {"type": 'V', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("text.cut", {"type": 'DEL', "value": 'PRESS', "shift": True}, None),
("text.copy", {"type": 'INSERT', "value": 'PRESS', "ctrl": True}, None),
- ("text.paste", {"type": 'INSERT', "value": 'PRESS', "shift": True}, None),
- ("text.duplicate_line", {"type": 'D', "value": 'PRESS', "ctrl": True}, None),
+ ("text.paste", {"type": 'INSERT', "value": 'PRESS', "shift": True, "repeat": True}, None),
+ ("text.duplicate_line", {"type": 'D', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("text.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, None),
("text.select_line", {"type": 'A', "value": 'PRESS', "shift": True, "ctrl": True}, None),
("text.select_word", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, None),
- ("text.move_lines", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("text.move_lines", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("direction", 'UP')]}),
- ("text.move_lines", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("text.move_lines", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("direction", 'DOWN')]}),
- ("text.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS'}, None),
- ("text.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True}, None),
+ ("text.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS', "repeat": True}, None),
+ ("text.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True, "repeat": True}, None),
("text.uncomment", {"type": 'D', "value": 'PRESS', "shift": True, "ctrl": True}, None),
("text.move", {"type": 'HOME', "value": 'PRESS'},
{"properties": [("type", 'LINE_BEGIN')]}),
@@ -1621,21 +1626,21 @@ def km_text(params):
{"properties": [("type", 'LINE_END')]}),
("text.move", {"type": 'E', "value": 'PRESS', "shift": True, "ctrl": True},
{"properties": [("type", 'LINE_END')]}),
- ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS'},
+ ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS'},
+ ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_CHARACTER')]}),
- ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True},
+ ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
- ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True},
+ ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
- ("text.move", {"type": 'UP_ARROW', "value": 'PRESS'},
+ ("text.move", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_LINE')]}),
- ("text.move", {"type": 'DOWN_ARROW', "value": 'PRESS'},
+ ("text.move", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_LINE')]}),
- ("text.move", {"type": 'PAGE_UP', "value": 'PRESS'},
+ ("text.move", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_PAGE')]}),
- ("text.move", {"type": 'PAGE_DOWN', "value": 'PRESS'},
+ ("text.move", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_PAGE')]}),
("text.move", {"type": 'HOME', "value": 'PRESS', "ctrl": True},
{"properties": [("type", 'FILE_TOP')]}),
@@ -1645,33 +1650,33 @@ def km_text(params):
{"properties": [("type", 'LINE_BEGIN')]}),
("text.move_select", {"type": 'END', "value": 'PRESS', "shift": True},
{"properties": [("type", 'LINE_END')]}),
- ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True},
+ ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True},
+ ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'NEXT_CHARACTER')]}),
- ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
- ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
- ("text.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True},
+ ("text.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_LINE')]}),
- ("text.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True},
+ ("text.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'NEXT_LINE')]}),
- ("text.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True},
+ ("text.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_PAGE')]}),
- ("text.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True},
+ ("text.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'NEXT_PAGE')]}),
("text.move_select", {"type": 'HOME', "value": 'PRESS', "shift": True, "ctrl": True},
{"properties": [("type", 'FILE_TOP')]}),
("text.move_select", {"type": 'END', "value": 'PRESS', "shift": True, "ctrl": True},
{"properties": [("type", 'FILE_BOTTOM')]}),
- ("text.delete", {"type": 'DEL', "value": 'PRESS'},
+ ("text.delete", {"type": 'DEL', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_CHARACTER')]}),
- ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS'},
+ ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True},
+ ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("text.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True},
+ ("text.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
@@ -1687,11 +1692,11 @@ def km_text(params):
{"properties": [("lines", -1)]}),
("text.scroll", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'},
{"properties": [("lines", 1)]}),
- ("text.line_break", {"type": 'RET', "value": 'PRESS'}, None),
- ("text.line_break", {"type": 'NUMPAD_ENTER', "value": 'PRESS'}, None),
+ ("text.line_break", {"type": 'RET', "value": 'PRESS', "repeat": True}, None),
+ ("text.line_break", {"type": 'NUMPAD_ENTER', "value": 'PRESS', "repeat": True}, None),
*_template_items_context_menu("TEXT_MT_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS', "any": True}),
("text.line_number", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None),
- ("text.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None),
+ ("text.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True, "repeat": True}, None),
])
return keymap
@@ -1758,17 +1763,17 @@ def km_sequencer(params):
("sequencer.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None),
("sequencer.view_selected", {"type": 'F', "value": 'PRESS'}, None),
("sequencer.view_frame", {"type": 'NUMPAD_0', "value": 'PRESS'}, None),
- ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS'},
+ ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
{"properties": [("next", True), ("center", False)]}),
- ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS'},
+ ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True},
{"properties": [("next", False), ("center", False)]}),
- ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS', "alt": True},
+ ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("next", True), ("center", True)]}),
- ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS', "alt": True},
+ ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("next", False), ("center", True)]}),
- ("sequencer.swap", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True},
+ ("sequencer.swap", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("side", 'LEFT')]}),
- ("sequencer.swap", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True},
+ ("sequencer.swap", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("side", 'RIGHT')]}),
("sequencer.gap_remove", {"type": 'BACK_SPACE', "value": 'PRESS'},
{"properties": [("all", False)]}),
@@ -1796,8 +1801,8 @@ def km_sequencer(params):
{"properties": [("side_of_frame", True), ("linked_time", True)]}),
("sequencer.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "ctrl": True},
{"properties": [("extend", True), ("side_of_frame", True), ("linked_time", True)]}),
- ("sequencer.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None),
- ("sequencer.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None),
+ ("sequencer.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None),
+ ("sequencer.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None),
("sequencer.select_linked_pick", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
{"properties": [("extend", False)]}),
("sequencer.select_linked_pick", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True},
@@ -1859,9 +1864,9 @@ def km_console(params):
)
items.extend([
- ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True},
+ ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
- ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True},
+ ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
("console.move", {"type": 'HOME', "value": 'PRESS'},
{"properties": [("type", 'LINE_BEGIN')]}),
@@ -1871,27 +1876,27 @@ def km_console(params):
{"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}),
("wm.context_cycle_int", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "ctrl": True},
{"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}),
- ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True},
+ ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}),
- ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True},
+ ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}),
- ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS'},
+ ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS'},
+ ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_CHARACTER')]}),
- ("console.history_cycle", {"type": 'UP_ARROW', "value": 'PRESS'},
+ ("console.history_cycle", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("reverse", True)]}),
- ("console.history_cycle", {"type": 'DOWN_ARROW', "value": 'PRESS'},
+ ("console.history_cycle", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("reverse", False)]}),
- ("console.delete", {"type": 'DEL', "value": 'PRESS'},
+ ("console.delete", {"type": 'DEL', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_CHARACTER')]}),
- ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS'},
+ ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True},
- {"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("console.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True},
+ ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True, "repeat": True},
+ {"properties": [("type", 'PREVIOUS_CHARACTER')], "repeat": True}),
+ ("console.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
- ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True},
+ ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
("console.clear_line", {"type": 'RET', "value": 'PRESS', "shift": True}, None),
("console.clear_line", {"type": 'NUMPAD_ENTER', "value": 'PRESS', "shift": True}, None),
@@ -1901,15 +1906,15 @@ def km_console(params):
{"properties": [("interactive", True)]}),
("console.copy_as_script", {"type": 'C', "value": 'PRESS', "shift": True, "ctrl": True}, None),
("console.copy", {"type": 'C', "value": 'PRESS', "ctrl": True}, None),
- ("console.paste", {"type": 'V', "value": 'PRESS', "ctrl": True}, None),
+ ("console.paste", {"type": 'V', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("console.select_set", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None),
("console.select_word", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, None),
- ("console.insert", {"type": 'TAB', "value": 'PRESS', "ctrl": True},
+ ("console.insert", {"type": 'TAB', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("text", '\t')]}),
- ("console.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS'}, None),
- ("console.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True}, None),
+ ("console.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS', "repeat": True}, None),
+ ("console.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True, "repeat": True}, None),
*_template_items_context_menu("CONSOLE_MT_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}),
- ("console.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None),
+ ("console.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True, "repeat": True}, None),
])
return keymap
@@ -1927,9 +1932,9 @@ def km_clip(params):
op_panel("TOPBAR_PT_name", {"type": 'RET', "value": 'PRESS'}, [("keep_open", False)]),
("wm.search_menu", {"type": 'TAB', "value": 'PRESS'}, None),
("clip.open", {"type": 'O', "value": 'PRESS', "alt": True}, None),
- ("clip.track_markers", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True},
+ ("clip.track_markers", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("backwards", True), ("sequence", False)]}),
- ("clip.track_markers", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True},
+ ("clip.track_markers", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("backwards", False), ("sequence", False)]}),
("clip.track_markers", {"type": 'T', "value": 'PRESS', "ctrl": True},
{"properties": [("backwards", False), ("sequence", True)]}),
@@ -1964,8 +1969,8 @@ def km_clip_editor(params):
("clip.view_zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS'}, None),
("clip.view_zoom_in", {"type": 'WHEELINMOUSE', "value": 'PRESS', "alt": True}, None),
("clip.view_zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS', "alt": True}, None),
- ("clip.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None),
- ("clip.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None),
+ ("clip.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None),
+ ("clip.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None),
("clip.view_zoom_ratio", {"type": 'NUMPAD_8', "value": 'PRESS', "ctrl": True},
{"properties": [("ratio", 8.0)]}),
("clip.view_zoom_ratio", {"type": 'NUMPAD_4', "value": 'PRESS', "ctrl": True},
@@ -1990,13 +1995,13 @@ def km_clip_editor(params):
("clip.view_selected", {"type": 'F', "value": 'PRESS'}, None),
("clip.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None),
("clip.view_ndof", {"type": 'NDOF_MOTION', "value": 'ANY'}, None),
- ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("position", 'PATHSTART')]}),
- ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("position", 'PATHEND')]}),
- ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "alt": True},
+ ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "alt": True, "repeat": True},
{"properties": [("position", 'FAILEDPREV')]}),
- ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "alt": True},
+ ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "alt": True, "repeat": True},
{"properties": [("position", 'PATHSTART')]}),
("clip.change_frame", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None),
("clip.select", {"type": 'LEFTMOUSE', "value": 'PRESS'},
@@ -2213,9 +2218,9 @@ def km_animation_channels(params):
("anim.channels_collapse", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True},
{"properties": [("all", False)]}),
# Move.
- ("anim.channels_move", {"type": 'PAGE_UP', "value": 'PRESS'},
+ ("anim.channels_move", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'UP')]}),
- ("anim.channels_move", {"type": 'PAGE_DOWN', "value": 'PRESS'},
+ ("anim.channels_move", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'DOWN')]}),
("anim.channels_move", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True},
{"properties": [("direction", 'TOP')]}),
@@ -2267,8 +2272,8 @@ def _grease_pencil_selection(params):
# Select grouped
("gpencil.select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}, None),
# Select more/less
- ("gpencil.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None),
- ("gpencil.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None),
+ ("gpencil.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None),
+ ("gpencil.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None),
]
@@ -2956,13 +2961,13 @@ def km_pose(params):
("pose.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}),
("pose.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}),
("pose.select_parent", {"type": 'UP_ARROW', "value": 'PRESS', "ctrl": True}, None),
- ("pose.select_hierarchy", {"type": 'UP_ARROW', "value": 'PRESS'},
+ ("pose.select_hierarchy", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'PARENT'), ("extend", False)]}),
- ("pose.select_hierarchy", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True},
+ ("pose.select_hierarchy", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'PARENT'), ("extend", True)]}),
- ("pose.select_hierarchy", {"type": 'DOWN_ARROW', "value": 'PRESS'},
+ ("pose.select_hierarchy", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'CHILD'), ("extend", False)]}),
- ("pose.select_hierarchy", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True},
+ ("pose.select_hierarchy", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'CHILD'), ("extend", True)]}),
("pose.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None),
("pose.bone_layers", {"type": 'G', "value": 'PRESS'}, None),
@@ -3006,16 +3011,16 @@ def km_object_mode(params):
("object.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'SELECT')]}),
("object.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}),
("object.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}),
- ("object.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None),
- ("object.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None),
+ ("object.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None),
+ ("object.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None),
("object.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None),
- ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
+ ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'PARENT'), ("extend", False)]}),
- ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "shift": True},
+ ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'PARENT'), ("extend", True)]}),
- ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
+ ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("direction", 'CHILD'), ("extend", False)]}),
- ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True},
+ ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("direction", 'CHILD'), ("extend", True)]}),
("object.parent_set", {"type": 'P', "value": 'PRESS'}, None),
@@ -3112,8 +3117,8 @@ def km_curve(params):
("curve.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}),
("curve.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}),
("curve.select_row", {"type": 'R', "value": 'PRESS', "shift": True}, None),
- ("curve.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None),
- ("curve.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None),
+ ("curve.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None),
+ ("curve.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None),
("curve.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None),
("curve.shortest_path_pick", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True, "shift": True}, None),
("curve.duplicate_move", {"type": 'D', "value": 'PRESS', "ctrl": True}, None),
@@ -3207,9 +3212,9 @@ def km_image_paint(params):
("paint.sample_color", {"type": 'I', "value": 'PRESS'}, None),
("paint.brush_colors_flip", {"type": 'X', "value": 'PRESS'}, None),
("paint.grab_clone", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None),
- ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 0.9)]}),
- ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 1.0 / 0.9)]}),
*_template_paint_radial_control("image_paint", color=True, zoom=True, rotation=True, secondary_rotation=True),
("brush.stencil_control", {"type": 'RIGHTMOUSE', "value": 'PRESS'},
@@ -3257,9 +3262,9 @@ def km_vertex_paint(params):
("paint.vertex_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True},
{"properties": [("mode", 'INVERT')]}),
("paint.brush_colors_flip", {"type": 'X', "value": 'PRESS'}, None),
- ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 0.9)]}),
- ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 1.0 / 0.9)]}),
*_template_paint_radial_control("vertex_paint", color=True, rotation=True),
("brush.stencil_control", {"type": 'RIGHTMOUSE', "value": 'PRESS'},
@@ -3302,9 +3307,9 @@ def km_weight_paint(params):
items.extend([
("paint.weight_paint", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None),
("paint.weight_sample_group", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, None),
- ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 0.9)]}),
- ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 1.0 / 0.9)]}),
*_template_paint_radial_control("weight_paint"),
("wm.context_toggle", {"type": 'M', "value": 'PRESS'},
@@ -3353,9 +3358,9 @@ def km_sculpt(params):
{"properties": [("action", 'SHOW'), ("area", 'ALL')]}),
# Subdivision levels
*_template_items_object_subdivision_set(),
- ("object.subdivision_set", {"type": 'PAGE_UP', "value": 'PRESS'},
+ ("object.subdivision_set", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
{"properties": [("level", 1), ("relative", True)]}),
- ("object.subdivision_set", {"type": 'PAGE_DOWN', "value": 'PRESS'},
+ ("object.subdivision_set", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True},
{"properties": [("level", -1), ("relative", True)]}),
# Mask
("paint.mask_flood_fill", {"type": 'A', "value": 'PRESS', "ctrl": True},
@@ -3364,6 +3369,8 @@ def km_sculpt(params):
{"properties": [("mode", 'VALUE'), ("value", 1.0)]}),
("paint.mask_flood_fill", {"type": 'I', "value": 'PRESS', "ctrl": True},
{"properties": [("mode", 'INVERT')]}),
+ ("paint.mask_box_gesture", {"type": 'B', "value": 'PRESS'},
+ {"properties": [("mode", 'VALUE'), ("value", 0.0)]}),
("paint.mask_lasso_gesture", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "ctrl": True}, None),
("wm.context_toggle", {"type": 'M', "value": 'PRESS', "ctrl": True},
{"properties": [("data_path", 'scene.tool_settings.sculpt.show_mask')]}),
@@ -3378,9 +3385,9 @@ def km_sculpt(params):
("object.voxel_size_edit", {"type": 'R', "value": 'PRESS', "shift": True}, None),
("object.quadriflow_remesh", {"type": 'R', "value": 'PRESS', "ctrl": True, "alt": True}, None),
# Brush properties
- ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 0.9)]}),
- ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
+ ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True},
{"properties": [("scalar", 1.0 / 0.9)]}),
*_template_paint_radial_control("sculpt", rotation=True),
# Stencil
@@ -3466,8 +3473,8 @@ def km_mesh(params):
("mesh.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'SELECT')]}),
("mesh.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}),
("mesh.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}),
- ("mesh.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None),
- ("mesh.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None),
+ ("mesh.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None),
+ ("mesh.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None),
("mesh.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None),
*_template_items_editmode_mesh_select_mode(params),
@@ -3534,8 +3541,8 @@ def km_armature(params):
("armature.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True},
{"properties": [("direction", 'CHILD'), ("extend", True)]}),
- ("armature.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None),
- ("armature.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None),
+ ("armature.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None),
+ ("armature.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None),
("armature.select_similar", {"type": 'G', "value": 'PRESS', "shift": True}, None),
("armature.select_linked_pick", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
@@ -3607,8 +3614,8 @@ def km_lattice(params):
("lattice.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'SELECT')]}),
("lattice.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}),
("lattice.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}),
- ("lattice.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None),
- ("lattice.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None),
+ ("lattice.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None),
+ ("lattice.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None),
("object.vertex_parent_set", {"type": 'P', "value": 'PRESS', "ctrl": True}, None),
*_template_items_context_menu("VIEW3D_MT_edit_lattice_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}),
("wm.context_toggle", {"type": 'B', "value": 'PRESS'},
@@ -3638,8 +3645,8 @@ def km_particle(params):
("particle.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'SELECT')]}),
("particle.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}),
("particle.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}),
- ("particle.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None),
- ("particle.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None),
+ ("particle.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None),
+ ("particle.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None),
("particle.select_linked_pick", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
{"properties": [("deselect", False)]}),
("particle.select_linked_pick", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True},
@@ -3684,68 +3691,68 @@ def km_font(params):
{"properties": [("style", 'UNDERLINE')]}),
("font.style_toggle", {"type": 'P', "value": 'PRESS', "ctrl": True},
{"properties": [("style", 'SMALL_CAPS')]}),
- ("font.delete", {"type": 'DEL', "value": 'PRESS'},
+ ("font.delete", {"type": 'DEL', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_OR_SELECTION')]}),
- ("font.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True},
+ ("font.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
- ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS'},
+ ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_OR_SELECTION')]}),
- ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True},
+ ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_OR_SELECTION')]}),
- ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True},
+ ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
("font.move", {"type": 'HOME', "value": 'PRESS'},
{"properties": [("type", 'LINE_BEGIN')]}),
("font.move", {"type": 'END', "value": 'PRESS'},
{"properties": [("type", 'LINE_END')]}),
- ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS'},
+ ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS'},
+ ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_CHARACTER')]}),
- ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True},
+ ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
- ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True},
+ ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
- ("font.move", {"type": 'UP_ARROW', "value": 'PRESS'},
+ ("font.move", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_LINE')]}),
- ("font.move", {"type": 'DOWN_ARROW', "value": 'PRESS'},
+ ("font.move", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_LINE')]}),
- ("font.move", {"type": 'PAGE_UP', "value": 'PRESS'},
+ ("font.move", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'PREVIOUS_PAGE')]}),
- ("font.move", {"type": 'PAGE_DOWN', "value": 'PRESS'},
+ ("font.move", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True},
{"properties": [("type", 'NEXT_PAGE')]}),
("font.move_select", {"type": 'HOME', "value": 'PRESS', "shift": True},
{"properties": [("type", 'LINE_BEGIN')]}),
("font.move_select", {"type": 'END', "value": 'PRESS', "shift": True},
{"properties": [("type", 'LINE_END')]}),
- ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True},
+ ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_CHARACTER')]}),
- ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True},
+ ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'NEXT_CHARACTER')]}),
- ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_WORD')]}),
- ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True},
+ ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True},
{"properties": [("type", 'NEXT_WORD')]}),
- ("font.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True},
+ ("font.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_LINE')]}),
- ("font.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True},
+ ("font.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'NEXT_LINE')]}),
- ("font.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True},
+ ("font.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'PREVIOUS_PAGE')]}),
- ("font.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True},
+ ("font.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True},
{"properties": [("type", 'NEXT_PAGE')]}),
- ("font.change_spacing", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True},
+ ("font.change_spacing", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("delta", -1)]}),
- ("font.change_spacing", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True},
+ ("font.change_spacing", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("delta", 1)]}),
- ("font.change_character", {"type": 'UP_ARROW', "value": 'PRESS', "alt": True},
+ ("font.change_character", {"type": 'UP_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("delta", 1)]}),
- ("font.change_character", {"type": 'DOWN_ARROW', "value": 'PRESS', "alt": True},
+ ("font.change_character", {"type": 'DOWN_ARROW', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("delta", -1)]}),
("font.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, None),
("font.text_copy", {"type": 'C', "value": 'PRESS', "ctrl": True}, None),
("font.text_cut", {"type": 'X', "value": 'PRESS', "ctrl": True}, None),
- ("font.text_paste", {"type": 'V', "value": 'PRESS', "ctrl": True}, None),
+ ("font.text_paste", {"type": 'V', "value": 'PRESS', "ctrl": True, "repeat": True}, None),
("font.line_break", {"type": 'RET', "value": 'PRESS'}, None),
("font.text_insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None),
("font.text_insert", {"type": 'BACK_SPACE', "value": 'PRESS', "alt": True},
@@ -3915,10 +3922,10 @@ def km_transform_modal_map(_params):
("ADD_SNAP", {"type": 'A', "value": 'PRESS'}, None),
("ADD_SNAP", {"type": 'A', "value": 'PRESS', "ctrl": True}, None),
("REMOVE_SNAP", {"type": 'A', "value": 'PRESS', "alt": True}, None),
- ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS'}, None),
- ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS'}, None),
- ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True}, None),
- ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True}, None),
+ ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, None),
+ ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, None),
+ ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True}, None),
+ ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True}, None),
("PROPORTIONAL_SIZE_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, None),
("PROPORTIONAL_SIZE_DOWN", {"type": 'WHEELUPMOUSE', "value": 'PRESS'}, None),
("PROPORTIONAL_SIZE_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "shift": True}, None),
@@ -3926,17 +3933,17 @@ def km_transform_modal_map(_params):
("PROPORTIONAL_SIZE", {"type": 'TRACKPADPAN', "value": 'ANY'}, None),
("EDGESLIDE_EDGE_NEXT", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "alt": True}, None),
("EDGESLIDE_PREV_NEXT", {"type": 'WHEELUPMOUSE', "value": 'PRESS', "alt": True}, None),
- ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS'}, None),
- ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS'}, None),
- ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True}, None),
- ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True}, None),
+ ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, None),
+ ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, None),
+ ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True}, None),
+ ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True}, None),
("AUTOIK_CHAIN_LEN_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, None),
("AUTOIK_CHAIN_LEN_DOWN", {"type": 'WHEELUPMOUSE', "value": 'PRESS'}, None),
("AUTOIK_CHAIN_LEN_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "shift": True}, None),
("AUTOIK_CHAIN_LEN_DOWN", {"type": 'WHEELUPMOUSE', "value": 'PRESS', "shift": True}, None),
("INSERTOFS_TOGGLE_DIR", {"type": 'T', "value": 'PRESS'}, None),
("AUTOCONSTRAIN", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None),
- ("AUTOCONSTRAIN", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "shift": True}, None),
+ ("AUTOCONSTRAINPLANE", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "shift": True}, None),
])
return keymap
diff --git a/release/scripts/startup/bl_app_templates_system/2D_Animation/__init__.py b/release/scripts/startup/bl_app_templates_system/2D_Animation/__init__.py
index 1892bea41f7..9b0a260dc95 100644
--- a/release/scripts/startup/bl_app_templates_system/2D_Animation/__init__.py
+++ b/release/scripts/startup/bl_app_templates_system/2D_Animation/__init__.py
@@ -63,6 +63,7 @@ def load_handler(dummy):
gpd = ob.data
gpd.onion_keyframe_type = 'ALL'
+
def register():
bpy.app.handlers.load_factory_startup_post.append(load_handler)
diff --git a/release/scripts/startup/bl_operators/__init__.py b/release/scripts/startup/bl_operators/__init__.py
index c927cc184a3..eff88c835e7 100644
--- a/release/scripts/startup/bl_operators/__init__.py
+++ b/release/scripts/startup/bl_operators/__init__.py
@@ -48,7 +48,6 @@ _modules = [
"uvcalc_lightmap",
"vertexpaint_dirt",
"view3d",
- "gpencil_mesh_bake",
"wm",
]
diff --git a/release/scripts/startup/bl_operators/anim.py b/release/scripts/startup/bl_operators/anim.py
index d55644f19c7..ab79ebe3957 100644
--- a/release/scripts/startup/bl_operators/anim.py
+++ b/release/scripts/startup/bl_operators/anim.py
@@ -247,6 +247,11 @@ class NLA_OT_bake(Operator):
"(useful for baking only part of bones in an armature)",
default=False,
)
+ clean_curves: BoolProperty(
+ name="Clean Curves",
+ description="After baking curves, remove redundant keys",
+ default=False,
+ )
bake_types: EnumProperty(
name="Bake Data",
description="Which data's transformations to bake",
@@ -260,7 +265,13 @@ class NLA_OT_bake(Operator):
def execute(self, context):
from bpy_extras import anim_utils
+ do_pose = 'POSE' in self.bake_types
+ do_object = 'OBJECT' in self.bake_types
+
objects = context.selected_editable_objects
+ if do_pose and not do_object:
+ objects = [obj for obj in objects if obj.pose is not None]
+
object_action_pairs = (
[(obj, getattr(obj.animation_data, "action", None)) for obj in objects]
if self.use_current_action else
@@ -271,12 +282,12 @@ class NLA_OT_bake(Operator):
object_action_pairs,
frames=range(self.frame_start, self.frame_end + 1, self.step),
only_selected=self.only_selected,
- do_pose='POSE' in self.bake_types,
- do_object='OBJECT' in self.bake_types,
+ do_pose=do_pose,
+ do_object=do_object,
do_visual_keying=self.visual_keying,
do_constraint_clear=self.clear_constraints,
do_parents_clear=self.clear_parents,
- do_clean=True,
+ do_clean=self.clean_curves,
)
if not any(actions):
@@ -342,7 +353,7 @@ class UpdateAnimatedTransformConstraint(Operator):
bl_options = {'REGISTER', 'UNDO'}
use_convert_to_radians: BoolProperty(
- name="Convert To Radians",
+ name="Convert to Radians",
description="Convert fcurves/drivers affecting rotations to radians (Warning: use this only once!)",
default=True,
)
diff --git a/release/scripts/startup/bl_operators/clip.py b/release/scripts/startup/bl_operators/clip.py
index b4795168a19..a3c54a7b069 100644
--- a/release/scripts/startup/bl_operators/clip.py
+++ b/release/scripts/startup/bl_operators/clip.py
@@ -1011,7 +1011,7 @@ class CLIP_OT_track_settings_as_default(Operator):
"""Copy tracking settings from active track to default settings"""
bl_idname = "clip.track_settings_as_default"
- bl_label = "Track Settings As Default"
+ bl_label = "Track Settings as Default"
bl_options = {'UNDO', 'REGISTER'}
@classmethod
diff --git a/release/scripts/startup/bl_operators/console.py b/release/scripts/startup/bl_operators/console.py
index b62b9310224..bffac4eef55 100644
--- a/release/scripts/startup/bl_operators/console.py
+++ b/release/scripts/startup/bl_operators/console.py
@@ -85,7 +85,7 @@ class ConsoleAutocomplete(Operator):
class ConsoleCopyAsScript(Operator):
"""Copy the console contents for use in a script"""
bl_idname = "console.copy_as_script"
- bl_label = "Copy to Clipboard (as script)"
+ bl_label = "Copy to Clipboard (as Script)"
@classmethod
def poll(cls, context):
diff --git a/release/scripts/startup/bl_operators/file.py b/release/scripts/startup/bl_operators/file.py
index 43fbd381cb2..78a7ead71ca 100644
--- a/release/scripts/startup/bl_operators/file.py
+++ b/release/scripts/startup/bl_operators/file.py
@@ -77,7 +77,7 @@ class WM_OT_previews_batch_generate(Operator):
)
use_intern_data: BoolProperty(
default=True,
- name="Mat/Tex/...",
+ name="Materials & Textures",
description="Generate 'internal' previews (materials, textures, images, etc.)",
)
@@ -187,7 +187,7 @@ class WM_OT_previews_batch_clear(Operator):
)
use_intern_data: BoolProperty(
default=True,
- name="Mat/Tex/...",
+ name="Materials & Textures",
description="Clear 'internal' previews (materials, textures, images, etc.)",
)
diff --git a/release/scripts/startup/bl_operators/gpencil_mesh_bake.py b/release/scripts/startup/bl_operators/gpencil_mesh_bake.py
deleted file mode 100644
index ec7ff970537..00000000000
--- a/release/scripts/startup/bl_operators/gpencil_mesh_bake.py
+++ /dev/null
@@ -1,157 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-# <pep8-80 compliant>
-
-import bpy
-from bpy.types import Operator
-from bpy.props import (
- IntProperty,
- FloatProperty,
- BoolProperty,
- EnumProperty,
-)
-
-gp_object_items = []
-
-
-def my_objlist_callback(scene, context):
- gp_object_items.clear()
- gp_object_items.append(('*NEW', "New Object", ""))
- for o in context.scene.objects:
- if o.type == 'GPENCIL':
- gp_object_items.append((o.name, o.name, ""))
-
- return gp_object_items
-
-
-class GPENCIL_OT_mesh_bake(Operator):
- """Bake all mesh animation into grease pencil strokes"""
- bl_idname = "gpencil.mesh_bake"
- bl_label = "Bake Mesh to Grease Pencil"
- bl_options = {'REGISTER', 'UNDO'}
-
- frame_start: IntProperty(
- name="Start Frame",
- description="Start frame for baking",
- min=0, max=300000,
- default=1,
- )
- frame_end: IntProperty(
- name="End Frame",
- description="End frame for baking",
- min=1, max=300000,
- default=250,
- )
- step: IntProperty(
- name="Frame Step",
- description="Frame Step",
- min=1, max=120,
- default=1,
- )
- thickness: IntProperty(
- name="Thickness",
- description="Thickness of the stroke lines",
- min=1, max=100,
- default=1,
- )
- angle: FloatProperty(
- name="Threshold Angle",
- description="Threshold to determine ends of the strokes",
- min=0,
- max=+3.141592,
- default=+1.22173, # 70 Degress
- subtype='ANGLE',
- )
- offset: FloatProperty(
- name="Stroke Offset",
- description="Offset strokes from fill",
- soft_min=0.0, soft_max=100.0,
- min=0.0, max=100.0,
- default=0.001,
- precision=3,
- step=1,
- subtype='DISTANCE',
- unit='LENGTH',
- )
- seams: BoolProperty(
- name="Only Seam Edges",
- description="Convert only seam edges",
- default=False,
- )
- faces: BoolProperty(
- name="Export Faces",
- description="Export faces as filled strokes",
- default=True,
- )
- target: EnumProperty(
- name="Target Object",
- description="Grease Pencil Object",
- items=my_objlist_callback
- )
- frame_target: IntProperty(
- name="Target Frame",
- description="Destination frame for the baked animation",
- min=1, max=300000,
- default=1,
- )
- project_type: EnumProperty(
- name="Reproject Type",
- description="Type of projection",
- items=(
- ("KEEP", "No Reproject", ""),
- ("FRONT", "Front", "Reproject the strokes using the X-Z plane"),
- ("SIDE", "Side", "Reproject the strokes using the Y-Z plane"),
- ("TOP", "Top", "Reproject the strokes using the X-Y plane"),
- ("VIEW", "View", "Reproject the strokes to current viewpoint"),
- ("CURSOR", "Cursor", "Reproject the strokes using the orientation of 3D cursor")
- )
- )
-
- @classmethod
- def poll(self, context):
- ob = context.active_object
- return ((ob is not None) and
- (ob.type in {'EMPTY', 'MESH'}) and
- (context.mode == 'OBJECT'))
-
- def execute(self, context):
- bpy.ops.gpencil.bake_mesh_animation(
- frame_start=self.frame_start,
- frame_end=self.frame_end,
- step=self.step,
- angle=self.angle,
- thickness=self.thickness,
- seams=self.seams,
- faces=self.faces,
- offset=self.offset,
- target=self.target,
- frame_target=self.frame_target,
- project_type=self.project_type
- )
-
- return {'FINISHED'}
-
- def invoke(self, context, _event):
- wm = context.window_manager
- return wm.invoke_props_dialog(self)
-
-
-classes = (
- GPENCIL_OT_mesh_bake,
-)
diff --git a/release/scripts/startup/bl_operators/image.py b/release/scripts/startup/bl_operators/image.py
index 18446a6efae..8d543daeac7 100644
--- a/release/scripts/startup/bl_operators/image.py
+++ b/release/scripts/startup/bl_operators/image.py
@@ -156,8 +156,7 @@ class ProjectEdit(Operator):
if bpy.data.is_saved:
filepath = "//" + filepath
else:
- tmpdir = context.preferences.filepaths.temporary_directory
- filepath = os.path.join(tmpdir, "project_edit")
+ filepath = os.path.join(bpy.app.tempdir, "project_edit")
obj = context.object
diff --git a/release/scripts/startup/bl_operators/object.py b/release/scripts/startup/bl_operators/object.py
index cf91cd3c961..87973ac2c45 100644
--- a/release/scripts/startup/bl_operators/object.py
+++ b/release/scripts/startup/bl_operators/object.py
@@ -208,7 +208,6 @@ class SelectHierarchy(Operator):
select_new.sort(key=lambda obj_iter: obj_iter.name)
act_new = select_new[0]
-
# don't edit any object settings above this
if select_new:
if not self.extend:
@@ -801,7 +800,7 @@ class TransformsToDeltasAnim(Operator):
continue
# first pass over F-Curves: ensure that we don't have conflicting
- # transforms already (e.g. if this was applied already) [#29110]
+ # transforms already (e.g. if this was applied already) T29110.
existingFCurves = {}
for fcu in adt.action.fcurves:
# get "delta" path - i.e. the final paths which may clash
@@ -862,7 +861,7 @@ class TransformsToDeltasAnim(Operator):
class DupliOffsetFromCursor(Operator):
"""Set offset used for collection instances based on cursor position"""
bl_idname = "object.instance_offset_from_cursor"
- bl_label = "Set Offset From Cursor"
+ bl_label = "Set Offset from Cursor"
bl_options = {'INTERNAL', 'UNDO'}
@classmethod
diff --git a/release/scripts/startup/bl_operators/object_align.py b/release/scripts/startup/bl_operators/object_align.py
index f5053701cce..ec9b098be2c 100644
--- a/release/scripts/startup/bl_operators/object_align.py
+++ b/release/scripts/startup/bl_operators/object_align.py
@@ -373,7 +373,7 @@ class AlignObjects(Operator):
default=True,
)
align_mode: EnumProperty(
- name="Align Mode:",
+ name="Align Mode",
description="Side of object to use for alignment",
items=(
('OPT_1', "Negative Sides", ""),
@@ -383,7 +383,7 @@ class AlignObjects(Operator):
default='OPT_2',
)
relative_to: EnumProperty(
- name="Relative To:",
+ name="Relative To",
description="Reference location to align to",
items=(
('OPT_1', "Scene Origin", "Use the Scene Origin as the position for the selected objects to align to"),
diff --git a/release/scripts/startup/bl_operators/object_quick_effects.py b/release/scripts/startup/bl_operators/object_quick_effects.py
index 46127f34bcd..0f4eb8a8507 100644
--- a/release/scripts/startup/bl_operators/object_quick_effects.py
+++ b/release/scripts/startup/bl_operators/object_quick_effects.py
@@ -447,10 +447,10 @@ class QuickLiquid(Operator):
bl_options = {'REGISTER', 'UNDO'}
show_flows: BoolProperty(
- name="Render Liquid Objects",
- description="Keep the liquid objects visible during rendering",
- default=False,
- )
+ name="Render Liquid Objects",
+ description="Keep the liquid objects visible during rendering",
+ default=False,
+ )
def execute(self, context):
if not bpy.app.build_options.fluid:
@@ -523,6 +523,17 @@ class QuickLiquid(Operator):
# change domain type, will also allocate and show particle system for FLIP
obj.modifiers[-1].domain_settings.domain_type = 'LIQUID'
+ liquid_domain = obj.modifiers[-2]
+
+ # set color mapping field to show phi grid for liquid
+ liquid_domain.domain_settings.color_ramp_field = 'PHI'
+
+ # perform a single slice of the domain
+ liquid_domain.domain_settings.use_slice = True
+
+ # set display thickness to a lower value for more detailed display of phi grids
+ liquid_domain.domain_settings.display_thickness = 0.02
+
# make the domain smooth so it renders nicely
bpy.ops.object.shade_smooth()
@@ -562,62 +573,9 @@ class QuickLiquid(Operator):
return {'FINISHED'}
-
-class QuickParticles(Operator):
- """Use active object as particle emitter"""
- bl_idname = "object.quick_particles"
- bl_label = "Quick Particles"
-
- @classmethod
- def poll(cls, context):
- if not context.preferences.experimental.use_new_particle_system:
- return False
- if context.mode != 'OBJECT':
- return False
- if context.active_object is None:
- return False
- if context.active_object.type != 'MESH':
- return False
- return True
-
- def execute(self, context):
- pointcloud = bpy.data.pointclouds.new("Particles")
- pointcloud_object = bpy.data.objects.new("Particles", pointcloud)
- modifier = pointcloud_object.modifiers.new("Simulation", 'SIMULATION')
- simulation = bpy.data.simulations.new("Particle Simulation")
- tree = simulation.node_tree
-
- default_name = "Particles"
- particle_simulation_node = tree.nodes.new('SimulationNodeParticleSimulation')
- particle_simulation_node.name = default_name
- emitter_node = tree.nodes.new('SimulationNodeParticleMeshEmitter')
- emitter_node.location.x -= 200
- emitter_node.location.y += 50
- emitter_node.inputs["Object"].default_value = context.active_object
- force_node = tree.nodes.new('SimulationNodeForce')
- force_node.location.x -= 200
- force_node.location.y -= 100
- force_node.inputs["Force"].default_value = (0, 0, -1)
-
- tree.links.new(particle_simulation_node.inputs["Emitters"], emitter_node.outputs["Emitter"])
- tree.links.new(particle_simulation_node.inputs["Forces"], force_node.outputs["Force"])
-
- modifier.simulation = simulation
- modifier.data_path = default_name
-
- for obj in context.selected_objects:
- obj.select_set(False)
-
- context.collection.objects.link(pointcloud_object)
- pointcloud_object.select_set(True)
- context.view_layer.objects.active = pointcloud_object
- pointcloud_object.show_bounds = True
- return {'FINISHED'}
-
classes = (
QuickExplode,
QuickFur,
QuickSmoke,
QuickLiquid,
- QuickParticles,
)
diff --git a/release/scripts/startup/bl_operators/object_randomize_transform.py b/release/scripts/startup/bl_operators/object_randomize_transform.py
index a9a6819cb13..97c477d3704 100644
--- a/release/scripts/startup/bl_operators/object_randomize_transform.py
+++ b/release/scripts/startup/bl_operators/object_randomize_transform.py
@@ -97,7 +97,7 @@ from bpy.props import (
class RandomizeLocRotSize(Operator):
- """Randomize objects loc/rot/scale"""
+ """Randomize objects location, rotation, and scale"""
bl_idname = "object.randomize_transform"
bl_label = "Randomize Transform"
bl_options = {'REGISTER', 'UNDO'}
diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py
index 2ea93a1aee9..5da7a3270d9 100644
--- a/release/scripts/startup/bl_operators/presets.py
+++ b/release/scripts/startup/bl_operators/presets.py
@@ -195,7 +195,7 @@ class AddPresetBase:
# Do not remove bundled presets
if is_path_builtin(filepath):
- self.report({'WARNING'}, "You can't remove the default presets")
+ self.report({'WARNING'}, "Unable to remove default presets")
return {'CANCELLED'}
try:
@@ -388,12 +388,12 @@ class AddPresetFluid(AddPresetBase, Operator):
preset_defines = [
"fluid = bpy.context.fluid"
- ]
+ ]
preset_values = [
"fluid.domain_settings.viscosity_base",
"fluid.domain_settings.viscosity_exponent",
- ]
+ ]
preset_subdir = "fluid"
@@ -676,6 +676,7 @@ class AddPresetGpencilMaterial(AddPresetBase, Operator):
"gpcolor.pixel_size",
"gpcolor.mix_stroke_factor",
"gpcolor.alignment_mode",
+ "gpcolor.alignment_rotation",
"gpcolor.fill_style",
"gpcolor.fill_color",
"gpcolor.fill_image",
@@ -686,7 +687,6 @@ class AddPresetGpencilMaterial(AddPresetBase, Operator):
"gpcolor.texture_offset",
"gpcolor.texture_scale",
"gpcolor.texture_angle",
- "gpcolor.texture_opacity",
"gpcolor.texture_clamp",
"gpcolor.mix_factor",
"gpcolor.show_stroke",
diff --git a/release/scripts/startup/bl_operators/sequencer.py b/release/scripts/startup/bl_operators/sequencer.py
index 9b15ccf167b..df1098bdd3f 100644
--- a/release/scripts/startup/bl_operators/sequencer.py
+++ b/release/scripts/startup/bl_operators/sequencer.py
@@ -32,7 +32,7 @@ class SequencerCrossfadeSounds(Operator):
"""Do cross-fading volume animation of two selected sound strips"""
bl_idname = "sequencer.crossfade_sounds"
- bl_label = "Crossfade sounds"
+ bl_label = "Crossfade Sounds"
bl_options = {'REGISTER', 'UNDO'}
@classmethod
@@ -83,7 +83,7 @@ class SequencerSplitMulticam(Operator):
"""Split multi-cam strip and select camera"""
bl_idname = "sequencer.split_multicam"
- bl_label = "Split multicam"
+ bl_label = "Split Multicam"
bl_options = {'REGISTER', 'UNDO'}
camera: IntProperty(
@@ -188,7 +188,7 @@ class SequencerFadesAdd(Operator):
min=0.01)
type: EnumProperty(
items=(
- ('IN_OUT', 'Fade In And Out', 'Fade selected strips in and out'),
+ ('IN_OUT', 'Fade In and Out', 'Fade selected strips in and out'),
('IN', 'Fade In', 'Fade in selected strips'),
('OUT', 'Fade Out', 'Fade out selected strips'),
('CURSOR_FROM', 'From Current Frame',
@@ -196,7 +196,7 @@ class SequencerFadesAdd(Operator):
('CURSOR_TO', 'To Current Frame',
'Fade from the start of sequences under the time cursor to the current frame'),
),
- name="Fade type",
+ name="Fade Type",
description="Fade in, out, both in and out, to, or from the current frame. Default is both in and out",
default='IN_OUT')
diff --git a/release/scripts/startup/bl_operators/simulation.py b/release/scripts/startup/bl_operators/simulation.py
index 5d9c9476318..0981baa5941 100644
--- a/release/scripts/startup/bl_operators/simulation.py
+++ b/release/scripts/startup/bl_operators/simulation.py
@@ -18,6 +18,7 @@
import bpy
+
class NewSimulation(bpy.types.Operator):
"""Create a new simulation data block and edit it in the opened simulation editor"""
@@ -34,6 +35,7 @@ class NewSimulation(bpy.types.Operator):
context.space_data.simulation = simulation
return {'FINISHED'}
+
classes = (
NewSimulation,
)
diff --git a/release/scripts/startup/bl_operators/userpref.py b/release/scripts/startup/bl_operators/userpref.py
index ceef2df63ff..07dba491dbd 100644
--- a/release/scripts/startup/bl_operators/userpref.py
+++ b/release/scripts/startup/bl_operators/userpref.py
@@ -49,6 +49,7 @@ def module_filesystem_remove(path_base, module_name):
else:
os.remove(f_full)
+
# This duplicates shutil.copytree from Python 3.8, with the new dirs_exist_ok
# argument that we need. Once we upgrade to 3.8 we can remove this.
def _preferences_copytree(entries, src, dst):
@@ -85,11 +86,13 @@ def _preferences_copytree(entries, src, dst):
raise Error(errors)
return dst
+
def preferences_copytree(src, dst):
import os
with os.scandir(src) as entries:
return _preferences_copytree(entries=entries, src=src, dst=dst)
+
class PREFERENCES_OT_keyconfig_activate(Operator):
bl_idname = "preferences.keyconfig_activate"
bl_label = "Activate Keyconfig"
@@ -225,7 +228,7 @@ class PREFERENCES_OT_keyconfig_import(Operator):
options={'HIDDEN'},
)
keep_original: BoolProperty(
- name="Keep original",
+ name="Keep Original",
description="Keep original file after copying to configuration folder",
default=True,
)
@@ -713,7 +716,7 @@ class PREFERENCES_OT_addon_install(Operator):
addons_new.discard("modules")
# disable any addons we may have enabled previously and removed.
- # this is unlikely but do just in case. bug [#23978]
+ # this is unlikely but do just in case. bug T23978.
for new_addon in addons_new:
addon_utils.disable(new_addon, default_set=True)
@@ -1109,9 +1112,9 @@ class PREFERENCES_OT_studiolight_uninstall(Operator):
class PREFERENCES_OT_studiolight_copy_settings(Operator):
- """Copy Studio Light settings to the Studio light editor"""
+ """Copy Studio Light settings to the Studio Light editor"""
bl_idname = "preferences.studiolight_copy_settings"
- bl_label = "Copy Studio Light settings"
+ bl_label = "Copy Studio Light Settings"
index: IntProperty()
def execute(self, context):
diff --git a/release/scripts/startup/bl_operators/uvcalc_lightmap.py b/release/scripts/startup/bl_operators/uvcalc_lightmap.py
index 7af5cd5ee5f..6ebf39af22e 100644
--- a/release/scripts/startup/bl_operators/uvcalc_lightmap.py
+++ b/release/scripts/startup/bl_operators/uvcalc_lightmap.py
@@ -559,7 +559,7 @@ def lightmap_uvpack(
def unwrap(operator, context, **kwargs):
- # switch to object mode
+ # switch to object mode
is_editmode = context.object and context.object.mode == 'EDIT'
if is_editmode:
bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
@@ -600,7 +600,7 @@ class LightMapPack(Operator):
# Proper solution would be to make undo stack aware of such things,
# but for now just disable redo. Keep undo here so unwanted changes to uv
# coords might be undone.
- # This fixes infinite image creation reported there [#30968] (sergey)
+ # This fixes infinite image creation reported there T30968 (sergey)
bl_options = {'UNDO'}
PREF_CONTEXT: bpy.props.EnumProperty(
@@ -656,6 +656,7 @@ class LightMapPack(Operator):
def draw(self, context):
layout = self.layout
layout.use_property_split = True
+ layout.use_property_decorate = False
is_editmode = context.active_object.mode == 'EDIT'
if is_editmode:
diff --git a/release/scripts/startup/bl_operators/vertexpaint_dirt.py b/release/scripts/startup/bl_operators/vertexpaint_dirt.py
index 62ef3cb34b5..3f43571fee5 100644
--- a/release/scripts/startup/bl_operators/vertexpaint_dirt.py
+++ b/release/scripts/startup/bl_operators/vertexpaint_dirt.py
@@ -74,7 +74,7 @@ def applyVertexDirt(me, blur_iterations, blur_strength, clamp_dirt, clamp_clean,
tot_con = len(con[i])
if tot_con == 0:
- ang = pi / 2.0 # assume 90°, i. e. flat
+ ang = pi / 2.0 # assume 90°, i. e. flat
else:
vec /= tot_con
diff --git a/release/scripts/startup/bl_operators/view3d.py b/release/scripts/startup/bl_operators/view3d.py
index 02bfebbdc0c..3442e189d14 100644
--- a/release/scripts/startup/bl_operators/view3d.py
+++ b/release/scripts/startup/bl_operators/view3d.py
@@ -60,7 +60,7 @@ class VIEW3D_OT_edit_mesh_extrude_individual_move(Operator):
bpy.ops.mesh.extrude_vertices_move('INVOKE_REGION_WIN')
# ignore return from operators above because they are 'RUNNING_MODAL',
- # and cause this one not to be freed. [#24671]
+ # and cause this one not to be freed. T24671.
return {'FINISHED'}
def invoke(self, context, _event):
@@ -73,10 +73,10 @@ class VIEW3D_OT_edit_mesh_extrude_move(Operator):
bl_idname = "view3d.edit_mesh_extrude_move_normal"
dissolve_and_intersect: BoolProperty(
- name="dissolve_and_intersect",
- default=False,
- description="Dissolves adjacent faces and intersects new geometry"
- )
+ name="dissolve_and_intersect",
+ default=False,
+ description="Dissolves adjacent faces and intersects new geometry"
+ )
@classmethod
def poll(cls, context):
@@ -132,7 +132,7 @@ class VIEW3D_OT_edit_mesh_extrude_move(Operator):
bpy.ops.mesh.extrude_region_move('INVOKE_REGION_WIN')
# ignore return from operators above because they are 'RUNNING_MODAL',
- # and cause this one not to be freed. [#24671]
+ # and cause this one not to be freed. T24671.
return {'FINISHED'}
def execute(self, context):
@@ -193,9 +193,11 @@ class VIEW3D_OT_transform_gizmo_set(Operator):
bl_idname = "view3d.transform_gizmo_set"
extend: BoolProperty(
+ name="Extend",
default=False,
)
type: EnumProperty(
+ name="Type",
items=(
('TRANSLATE', "Move", ""),
('ROTATE', "Rotate", ""),
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index 59abff12834..aa4e4e77993 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -1236,7 +1236,7 @@ class WM_OT_properties_edit(Operator):
def get_value_eval(self):
try:
value_eval = eval(self.value)
- # assert else None -> None, not "None", see [#33431]
+ # assert else None -> None, not "None", see T33431.
assert(type(value_eval) in {str, float, int, bool, tuple, list})
except:
value_eval = self.value
@@ -1246,7 +1246,7 @@ class WM_OT_properties_edit(Operator):
def get_default_eval(self):
try:
default_eval = eval(self.default)
- # assert else None -> None, not "None", see [#33431]
+ # assert else None -> None, not "None", see T33431.
assert(type(default_eval) in {str, float, int, bool, tuple, list})
except:
default_eval = self.default
@@ -1347,8 +1347,8 @@ class WM_OT_properties_edit(Operator):
for nt in adt.nla_tracks:
_update_strips(nt.strips)
- # otherwise existing buttons which reference freed
- # memory may crash blender [#26510]
+ # Otherwise existing buttons which reference freed
+ # memory may crash Blender T26510.
# context.area.tag_redraw()
for win in context.window_manager.windows:
for area in win.screen.areas:
@@ -1381,7 +1381,6 @@ class WM_OT_properties_edit(Operator):
is_overridable = item.is_property_overridable_library('["%s"]' % self.property)
self.is_overridable_library = bool(is_overridable)
-
# default default value
prop_type, is_array = rna_idprop_value_item_type(self.get_value_eval())
if prop_type in {int, float}:
@@ -1661,7 +1660,7 @@ class WM_OT_owner_disable(Operator):
class WM_OT_tool_set_by_id(Operator):
"""Set the tool by name (for keymaps)"""
bl_idname = "wm.tool_set_by_id"
- bl_label = "Set Tool By Name"
+ bl_label = "Set Tool by Name"
name: StringProperty(
name="Identifier",
@@ -1719,7 +1718,7 @@ class WM_OT_tool_set_by_id(Operator):
class WM_OT_tool_set_by_index(Operator):
"""Set the tool by index (for keymaps)"""
bl_idname = "wm.tool_set_by_index"
- bl_label = "Set Tool By Index"
+ bl_label = "Set Tool by Index"
index: IntProperty(
name="Index in toolbar",
default=0,
diff --git a/release/scripts/startup/bl_ui/properties_constraint.py b/release/scripts/startup/bl_ui/properties_constraint.py
index da35ea680b8..f46e9f9727f 100644
--- a/release/scripts/startup/bl_ui/properties_constraint.py
+++ b/release/scripts/startup/bl_ui/properties_constraint.py
@@ -374,7 +374,6 @@ class ConstraintButtonsPanel(Panel):
subsub.prop(con, "max_z", text="")
row.prop_decorator(con, "max_z")
-
layout.prop(con, "use_transform_limit")
layout.prop(con, "owner_space")
@@ -508,7 +507,18 @@ class ConstraintButtonsPanel(Panel):
layout.use_property_split = True
layout.use_property_decorate = True
- self.target_template(layout, con)
+ target_row = layout.row(align=True)
+ target_row.active = not con.use_eval_time
+ self.target_template(target_row, con)
+
+ row = layout.row(align=True, heading="Evaluation Time")
+ row.use_property_decorate = False
+ sub = row.row(align=True)
+ sub.prop(con, "use_eval_time", text="")
+ subsub = sub.row(align=True)
+ subsub.active = con.use_eval_time
+ subsub.prop(con, "eval_time", text="")
+ row.prop_decorator(con, "eval_time")
layout.prop(con, "mix_mode", text="Mix")
@@ -741,7 +751,6 @@ class ConstraintButtonsPanel(Panel):
row.active = not con.use_3d_position
row.prop(con, "use_undistorted_position")
-
if not con.use_active_clip:
layout.prop(con, "clip")
@@ -1105,13 +1114,14 @@ class ConstraintButtonsSubPanel(Panel):
layout.use_property_split = True
layout.use_property_decorate = True
- layout.prop(con, "transform_channel", text="Channel")
- layout.prop(con, "target_space")
-
- col = layout.column(align=True)
- col.prop(con, "min", text="Range Min")
- col.prop(con, "max", text="Max")
+ col = layout.column()
+ col.active = not con.use_eval_time
+ col.prop(con, "transform_channel", text="Channel")
+ col.prop(con, "target_space")
+ sub = col.column(align=True)
+ sub.prop(con, "min", text="Range Min")
+ sub.prop(con, "max", text="Max")
def draw_action_action(self, context):
layout = self.layout
@@ -1140,6 +1150,7 @@ class BONE_PT_bChildOfConstraint(BoneConstraintPanel, ConstraintButtonsPanel):
# Track To Constraint
+
class OBJECT_PT_bTrackToConstraint(ObjectConstraintPanel, ConstraintButtonsPanel):
def draw(self, context):
self.draw_trackto(context)
@@ -1151,6 +1162,7 @@ class BONE_PT_bTrackToConstraint(BoneConstraintPanel, ConstraintButtonsPanel):
# Follow Path Constraint
+
class OBJECT_PT_bFollowPathConstraint(ObjectConstraintPanel, ConstraintButtonsPanel):
def draw(self, context):
self.draw_follow_path(context)
@@ -1518,12 +1530,12 @@ class OBJECT_PT_bPythonConstraint(ObjectConstraintPanel, ConstraintButtonsPanel)
def draw(self, context):
self.draw_python_constraint(context)
+
class BONE_PT_bPythonConstraint(BoneConstraintPanel, ConstraintButtonsPanel):
def draw(self, context):
self.draw_python_constraint(context)
-
# Armature Constraint
class OBJECT_PT_bArmatureConstraint(ObjectConstraintPanel, ConstraintButtonsPanel):
@@ -1564,7 +1576,6 @@ class BONE_PT_bKinematicConstraint(BoneConstraintPanel, ConstraintButtonsPanel):
self.draw_kinematic(context)
-
classes = (
# Object Panels
OBJECT_PT_constraints,
diff --git a/release/scripts/startup/bl_ui/properties_data_camera.py b/release/scripts/startup/bl_ui/properties_data_camera.py
index 80bd8347421..b56182bb637 100644
--- a/release/scripts/startup/bl_ui/properties_data_camera.py
+++ b/release/scripts/startup/bl_ui/properties_data_camera.py
@@ -395,6 +395,7 @@ class DATA_PT_camera_display(CameraButtonsPanel, Panel):
sub.prop(cam, "passepartout_alpha", text="")
row.prop_decorator(cam, "passepartout_alpha")
+
class DATA_PT_camera_display_composition_guides(CameraButtonsPanel, Panel):
bl_label = "Composition Guides"
bl_parent_id = "DATA_PT_camera_display"
diff --git a/release/scripts/startup/bl_ui/properties_data_curve.py b/release/scripts/startup/bl_ui/properties_data_curve.py
index 7e7488f4cf1..9ae7f8f8e6c 100644
--- a/release/scripts/startup/bl_ui/properties_data_curve.py
+++ b/release/scripts/startup/bl_ui/properties_data_curve.py
@@ -118,7 +118,7 @@ class DATA_PT_shape_curve(CurveButtonsPanel, Panel):
col.separator()
sub = col.column()
- sub.active = (curve.dimensions == '2D' or (curve.bevel_object is None and curve.dimensions == '3D'))
+ sub.active = (curve.dimensions == '2D' or (curve.bevel_mode != 'OBJECT' and curve.dimensions == '3D'))
sub.prop(curve, "fill_mode")
col.prop(curve, "use_fill_deform")
@@ -171,7 +171,7 @@ class DATA_PT_geometry_curve(CurveButtonsPanelCurve, Panel):
col.prop(curve, "offset")
sub = col.column()
- sub.active = (curve.bevel_object is None)
+ sub.active = (curve.bevel_mode != 'OBJECT')
sub.prop(curve, "extrude")
col.prop(curve, "taper_object")
@@ -193,37 +193,53 @@ class DATA_PT_geometry_curve_bevel(CurveButtonsPanelCurve, Panel):
def draw(self, context):
layout = self.layout
- layout.use_property_split = True
curve = context.curve
+ layout.prop(curve, "bevel_mode", expand=True)
+
+ layout.use_property_split = True
col = layout.column()
- sub = col.column()
- sub.active = (curve.bevel_object is None)
- sub.prop(curve, "bevel_depth", text="Depth")
- sub.prop(curve, "bevel_resolution", text="Resolution")
+ if curve.bevel_mode == 'OBJECT':
+ col.prop(curve, "bevel_object", text="Object")
+ else:
+ col.prop(curve, "bevel_depth", text="Depth")
+ col.prop(curve, "bevel_resolution", text="Resolution")
+ col.prop(curve, "use_fill_caps")
- col.prop(curve, "bevel_object", text="Object")
+ if curve.bevel_mode == 'PROFILE':
+ col.template_curveprofile(curve, "bevel_profile")
- sub = col.column()
- sub.active = curve.bevel_object is not None
- sub.prop(curve, "use_fill_caps")
- if type(curve) is not TextCurve:
+class DATA_PT_geometry_curve_start_end(CurveButtonsPanelCurve, Panel):
+ bl_label = "Start & End Mapping"
+ bl_parent_id = "DATA_PT_geometry_curve"
+ bl_options = {'DEFAULT_CLOSED'}
- col = layout.column()
- col.active = (
- (curve.bevel_depth > 0.0) or
- (curve.extrude > 0.0) or
- (curve.bevel_object is not None)
- )
- sub = col.column(align=True)
- sub.prop(curve, "bevel_factor_start", text="Bevel Start")
- sub.prop(curve, "bevel_factor_end", text="End")
+ @classmethod
+ def poll(cls, context):
+ # Text objects don't support these properties
+ return (type(context.curve) in {Curve})
- sub = col.column(align=True)
- sub.prop(curve, "bevel_factor_mapping_start", text="Bevel Mapping Start")
- sub.prop(curve, "bevel_factor_mapping_end", text="End")
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+
+ curve = context.curve
+
+ col = layout.column()
+
+ col.active = (
+ ((curve.bevel_depth > 0.0) or (curve.extrude > 0.0)) or
+ ((curve.bevel_mode == 'OBJECT') and curve.bevel_object is not None)
+ )
+ sub = col.column(align=True)
+ sub.prop(curve, "bevel_factor_start", text="Factor Start")
+ sub.prop(curve, "bevel_factor_end", text="End")
+
+ sub = col.column(align=True)
+ sub.prop(curve, "bevel_factor_mapping_start", text="Mapping Start")
+ sub.prop(curve, "bevel_factor_mapping_end", text="End")
class DATA_PT_pathanim(CurveButtonsPanelCurve, Panel):
@@ -478,6 +494,7 @@ classes = (
DATA_PT_curve_texture_space,
DATA_PT_geometry_curve,
DATA_PT_geometry_curve_bevel,
+ DATA_PT_geometry_curve_start_end,
DATA_PT_pathanim,
DATA_PT_active_spline,
DATA_PT_font,
diff --git a/release/scripts/startup/bl_ui/properties_data_empty.py b/release/scripts/startup/bl_ui/properties_data_empty.py
index 1523f69536f..7ded4c775a7 100644
--- a/release/scripts/startup/bl_ui/properties_data_empty.py
+++ b/release/scripts/startup/bl_ui/properties_data_empty.py
@@ -54,34 +54,20 @@ class DATA_PT_empty(DataButtonsPanel, Panel):
depth_row.prop(ob, "empty_image_depth", text="Depth", expand=True)
col.row().prop(ob, "empty_image_side", text="Side", expand=True)
- col = layout.column(heading="Show in", align=True)
+ col = layout.column(heading="Show In", align=True)
col.prop(ob, "show_empty_image_orthographic", text="Orthographic")
col.prop(ob, "show_empty_image_perspective", text="Perspective")
col.prop(ob, "show_empty_image_only_axis_aligned", text="Only Axis Aligned")
-
-class DATA_PT_empty_alpha(DataButtonsPanel, Panel):
- bl_label = "Transparency"
- bl_parent_id = "DATA_PT_empty"
-
- @classmethod
- def poll(cls, context):
- ob = context.object
- return (ob and ob.type == 'EMPTY' and ob.empty_display_type == 'IMAGE')
-
- def draw_header(self, context):
- ob = context.object
-
- self.layout.prop(ob, "use_empty_image_alpha", text="")
-
- def draw(self, context):
- layout = self.layout
- layout.use_property_split = True
-
- ob = context.object
-
- layout.active = ob.use_empty_image_alpha
- layout.prop(ob, "color", text="Opacity", index=3, slider=True)
+ col = layout.column(align=False, heading="Transparency")
+ col.use_property_decorate = False
+ row = col.row(align=True)
+ sub = row.row(align=True)
+ sub.prop(ob, "use_empty_image_alpha", text="")
+ sub = sub.row(align=True)
+ sub.active = ob.use_empty_image_alpha
+ sub.prop(ob, "color", text="", index=3, slider=True)
+ row.prop_decorator(ob, "color", index=3)
class DATA_PT_empty_image(DataButtonsPanel, Panel):
@@ -102,7 +88,6 @@ class DATA_PT_empty_image(DataButtonsPanel, Panel):
classes = (
DATA_PT_empty,
- DATA_PT_empty_alpha,
DATA_PT_empty_image,
)
diff --git a/release/scripts/startup/bl_ui/properties_data_gpencil.py b/release/scripts/startup/bl_ui/properties_data_gpencil.py
index 946578937bb..affdba6f693 100644
--- a/release/scripts/startup/bl_ui/properties_data_gpencil.py
+++ b/release/scripts/startup/bl_ui/properties_data_gpencil.py
@@ -101,7 +101,7 @@ class GPENCIL_MT_layer_context_menu(Menu):
layout.separator()
layout.operator("gpencil.lock_all", icon='LOCKED', text="Lock All")
- layout.operator("gpencil.unlock_all", icon='UNLOCKED', text="UnLock All")
+ layout.operator("gpencil.unlock_all", icon='UNLOCKED', text="Unlock All")
layout.prop(gpd, "use_autolock_layers", text="Autolock Inactive Layers")
layout.separator()
@@ -263,7 +263,7 @@ class DATA_PT_gpencil_onion_skinning_display(DataButtonsPanel, Panel):
layout.use_property_split = True
layout.enabled = gpd.users <= 1
- layout.prop(gpd, "use_ghosts_always", text="View In Render")
+ layout.prop(gpd, "use_ghosts_always", text="View in Render")
col = layout.column(align=True)
col.prop(gpd, "use_onion_fade", text="Fade")
diff --git a/release/scripts/startup/bl_ui/properties_data_hair.py b/release/scripts/startup/bl_ui/properties_data_hair.py
index 58491f16c6e..2f52372eaed 100644
--- a/release/scripts/startup/bl_ui/properties_data_hair.py
+++ b/release/scripts/startup/bl_ui/properties_data_hair.py
@@ -56,7 +56,7 @@ class HAIR_MT_add_attribute(Menu):
@staticmethod
def add_standard_attribute(layout, hair, name, data_type, domain):
- exists = hair.attributes.get(name) != None
+ exists = hair.attributes.get(name) is not None
col = layout.column()
col.enabled = not exists
@@ -106,14 +106,21 @@ class DATA_PT_hair_attributes(DataButtonsPanel, Panel):
row = layout.row()
col = row.column()
- col.template_list("HAIR_UL_attributes", "attributes", hair, "attributes", hair.attributes, "active_index", rows=3)
+ col.template_list(
+ "HAIR_UL_attributes",
+ "attributes",
+ hair,
+ "attributes",
+ hair.attributes,
+ "active_index",
+ rows=3,
+ )
col = row.column(align=True)
col.menu("HAIR_MT_add_attribute", icon='ADD', text="")
col.operator("geometry.attribute_remove", icon='REMOVE', text="")
-
class DATA_PT_custom_props_hair(DataButtonsPanel, PropertyPanel, Panel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
_context_path = "object.data"
diff --git a/release/scripts/startup/bl_ui/properties_data_mesh.py b/release/scripts/startup/bl_ui/properties_data_mesh.py
index 64bc694d5ca..924a89755f8 100644
--- a/release/scripts/startup/bl_ui/properties_data_mesh.py
+++ b/release/scripts/startup/bl_ui/properties_data_mesh.py
@@ -57,7 +57,7 @@ class MESH_MT_vertex_group_context_menu(Menu):
layout.separator()
props = layout.operator("object.vertex_group_lock", icon='LOCKED', text="Lock All")
props.action, props.mask = 'LOCK', 'ALL'
- props = layout.operator("object.vertex_group_lock", icon='UNLOCKED', text="UnLock All")
+ props = layout.operator("object.vertex_group_lock", icon='UNLOCKED', text="Unlock All")
props.action, props.mask = 'UNLOCK', 'ALL'
props = layout.operator("object.vertex_group_lock", text="Lock Invert All")
props.action, props.mask = 'INVERT', 'ALL'
@@ -69,7 +69,7 @@ class MESH_MT_shape_key_context_menu(Menu):
def draw(self, _context):
layout = self.layout
- layout.operator("object.shape_key_add", icon='ADD', text="New Shape From Mix").from_mix = True
+ layout.operator("object.shape_key_add", icon='ADD', text="New Shape from Mix").from_mix = True
layout.separator()
layout.operator("object.shape_key_mirror", icon='ARROW_LEFTRIGHT').use_topology = False
layout.operator("object.shape_key_mirror", text="Mirror Shape Key (Topology)").use_topology = True
@@ -478,7 +478,15 @@ class DATA_PT_sculpt_vertex_colors(MeshButtonsPanel, Panel):
row = layout.row()
col = row.column()
- col.template_list("MESH_UL_vcols", "svcols", me, "sculpt_vertex_colors", me.sculpt_vertex_colors, "active_index", rows=2)
+ col.template_list(
+ "MESH_UL_vcols",
+ "svcols",
+ me,
+ "sculpt_vertex_colors",
+ me.sculpt_vertex_colors,
+ "active_index",
+ rows=2,
+ )
col = row.column(align=True)
col.operator("mesh.sculpt_vertex_color_add", icon='ADD', text="")
diff --git a/release/scripts/startup/bl_ui/properties_data_pointcloud.py b/release/scripts/startup/bl_ui/properties_data_pointcloud.py
index d7ff7389fc3..f2464fb9765 100644
--- a/release/scripts/startup/bl_ui/properties_data_pointcloud.py
+++ b/release/scripts/startup/bl_ui/properties_data_pointcloud.py
@@ -56,7 +56,7 @@ class POINTCLOUD_MT_add_attribute(Menu):
@staticmethod
def add_standard_attribute(layout, pointcloud, name, data_type, domain):
- exists = pointcloud.attributes.get(name) != None
+ exists = pointcloud.attributes.get(name) is not None
col = layout.column()
col.enabled = not exists
@@ -105,14 +105,21 @@ class DATA_PT_pointcloud_attributes(DataButtonsPanel, Panel):
row = layout.row()
col = row.column()
- col.template_list("POINTCLOUD_UL_attributes", "attributes", pointcloud, "attributes", pointcloud.attributes, "active_index", rows=3)
+ col.template_list(
+ "POINTCLOUD_UL_attributes",
+ "attributes",
+ pointcloud,
+ "attributes",
+ pointcloud.attributes,
+ "active_index",
+ rows=3,
+ )
col = row.column(align=True)
col.menu("POINTCLOUD_MT_add_attribute", icon='ADD', text="")
col.operator("geometry.attribute_remove", icon='REMOVE', text="")
-
class DATA_PT_custom_props_pointcloud(DataButtonsPanel, PropertyPanel, Panel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
_context_path = "object.data"
diff --git a/release/scripts/startup/bl_ui/properties_data_volume.py b/release/scripts/startup/bl_ui/properties_data_volume.py
index b10bb808edd..0a8bbd19b63 100644
--- a/release/scripts/startup/bl_ui/properties_data_volume.py
+++ b/release/scripts/startup/bl_ui/properties_data_volume.py
@@ -77,10 +77,10 @@ class DATA_PT_volume_file(DataButtonsPanel, Panel):
error_msg = volume.grids.error_message
if len(error_msg):
- layout.separator()
- col = layout.column(align=True)
- col.label(text="Failed to load volume:")
- col.label(text=error_msg)
+ layout.separator()
+ col = layout.column(align=True)
+ col.label(text="Failed to load volume:")
+ col.label(text=error_msg)
class VOLUME_UL_grids(UIList):
@@ -149,7 +149,37 @@ class DATA_PT_volume_viewport_display(DataButtonsPanel, Panel):
sub.active = display.wireframe_type in {'BOXES', 'POINTS'}
sub.prop(display, "wireframe_detail", text="Detail")
- layout.prop(display, "density")
+ col = layout.column()
+ col.prop(display, "density")
+ col.prop(display, "interpolation_method")
+
+
+class DATA_PT_volume_viewport_display_slicing(DataButtonsPanel, Panel):
+ bl_label = ""
+ bl_parent_id = 'DATA_PT_volume_viewport_display'
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
+
+ def draw_header(self, context):
+ layout = self.layout
+
+ volume = context.volume
+ display = volume.display
+
+ layout.prop(display, "use_slice")
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+ layout.use_property_decorate = False
+
+ volume = context.volume
+ display = volume.display
+
+ layout.active = display.use_slice
+
+ col = layout.column()
+ col.prop(display, "slice_axis")
+ col.prop(display, "slice_depth")
class DATA_PT_custom_props_volume(DataButtonsPanel, PropertyPanel, Panel):
@@ -163,6 +193,7 @@ classes = (
DATA_PT_volume_grids,
DATA_PT_volume_file,
DATA_PT_volume_viewport_display,
+ DATA_PT_volume_viewport_display_slicing,
DATA_PT_volume_render,
DATA_PT_custom_props_volume,
VOLUME_UL_grids,
diff --git a/release/scripts/startup/bl_ui/properties_freestyle.py b/release/scripts/startup/bl_ui/properties_freestyle.py
index 54b1ca3d910..fd12747e2fa 100644
--- a/release/scripts/startup/bl_ui/properties_freestyle.py
+++ b/release/scripts/startup/bl_ui/properties_freestyle.py
@@ -33,14 +33,14 @@ class RenderFreestyleButtonsPanel:
def poll(cls, context):
scene = context.scene
with_freestyle = bpy.app.build_options.freestyle
- return scene and with_freestyle and(context.engine in cls.COMPAT_ENGINES)
+ return scene and with_freestyle and (context.engine in cls.COMPAT_ENGINES)
class RENDER_PT_freestyle(RenderFreestyleButtonsPanel, Panel):
bl_label = "Freestyle"
bl_options = {'DEFAULT_CLOSED'}
bl_order = 10
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
def draw_header(self, context):
rd = context.scene.render
@@ -113,7 +113,7 @@ class RENDER_MT_lineset_context_menu(Menu):
class VIEWLAYER_PT_freestyle(ViewLayerFreestyleButtonsPanel, Panel):
bl_label = "Freestyle"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
def draw_header(self, context):
view_layer = context.view_layer
@@ -162,7 +162,7 @@ class VIEWLAYER_PT_freestyle(ViewLayerFreestyleButtonsPanel, Panel):
if freestyle.mode == 'SCRIPT':
row = layout.row()
- row.label(text="Style modules:")
+ row.label(text="Style Modules:")
row.operator("scene.freestyle_module_add", text="Add")
for module in freestyle.modules:
box = layout.box()
@@ -178,7 +178,7 @@ class VIEWLAYER_PT_freestyle(ViewLayerFreestyleButtonsPanel, Panel):
class VIEWLAYER_PT_freestyle_lineset(ViewLayerFreestyleEditorButtonsPanel, Panel):
bl_label = "Freestyle Line Set"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
def draw_edge_type_buttons(self, box, lineset, edge_type):
# property names
@@ -277,7 +277,7 @@ class VIEWLAYER_PT_freestyle_lineset(ViewLayerFreestyleEditorButtonsPanel, Panel
class VIEWLAYER_PT_freestyle_linestyle(ViewLayerFreestyleEditorButtonsPanel, Panel):
bl_label = "Freestyle Line Style"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
def draw_modifier_box_header(self, box, modifier):
row = box.row()
@@ -833,7 +833,7 @@ class MaterialFreestyleButtonsPanel:
class MATERIAL_PT_freestyle_line(MaterialFreestyleButtonsPanel, Panel):
bl_label = "Freestyle Line"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
def draw(self, context):
layout = self.layout
diff --git a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
index f16528103ff..8201ce080b1 100644
--- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
+++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
@@ -196,7 +196,7 @@ class GreasePencilDisplayPanel:
col.prop(brush, "cursor_color_add", text="Cursor Color")
if brush.gpencil_sculpt_tool in {'THICKNESS', 'STRENGTH', 'PINCH', 'TWIST'}:
- col.prop(brush, "cursor_color_subtract", text="Inverse Cursor Color")
+ col.prop(brush, "cursor_color_subtract", text="Inverse Color")
elif ob.mode == 'WEIGHT_GPENCIL':
col = layout.column(align=True)
@@ -293,12 +293,12 @@ class GPENCIL_MT_snap_pie(Menu):
"gpencil.snap_to_cursor",
text="Selection to Cursor",
icon='RESTRICT_SELECT_OFF'
- ).use_offset = False
+ ).use_offset = False
pie.operator(
"gpencil.snap_to_cursor",
text="Selection to Cursor (Keep Offset)",
icon='RESTRICT_SELECT_OFF'
- ).use_offset = True
+ ).use_offset = True
pie.separator()
pie.operator("view3d.snap_cursor_to_center", text="Cursor to World Origin", icon='CURSOR')
pie.separator()
@@ -404,20 +404,21 @@ class GPENCIL_MT_cleanup(Menu):
layout = self.layout
+ layout.operator("gpencil.frame_clean_fill", text="Boundary Strokes").mode = 'ACTIVE'
+ layout.operator("gpencil.frame_clean_fill", text="Boundary Strokes all Frames").mode = 'ALL'
+
+ layout.separator()
+
layout.operator("gpencil.frame_clean_loose", text="Delete Loose Points")
- layout.operator("gpencil.frame_clean_duplicate", text="Delete Duplicated Frames")
if ob.mode != 'PAINT_GPENCIL':
layout.operator("gpencil.stroke_merge_by_distance", text="Merge by Distance")
layout.separator()
- layout.operator("gpencil.frame_clean_fill", text="Boundary Strokes").mode = 'ACTIVE'
- layout.operator("gpencil.frame_clean_fill", text="Boundary Strokes all Frames").mode = 'ALL'
-
+ layout.operator("gpencil.frame_clean_duplicate", text="Delete Duplicated Frames")
+ layout.operator("gpencil.recalc_geometry", text="Recalculate Geometry")
if ob.mode != 'PAINT_GPENCIL':
- layout.separator()
-
layout.operator("gpencil.reproject")
@@ -814,7 +815,7 @@ class GPENCIL_MT_layer_mask_menu(Menu):
for gpl in gpd.layers:
if gpl != gpl_active and gpl.info not in gpl_active.mask_layers:
done = True
- layout.operator("gpencil.layer_mask_add", text=gpl.info).name=gpl.info
+ layout.operator("gpencil.layer_mask_add", text=gpl.info).name = gpl.info
if done is False:
layout.label(text="No layers to add")
@@ -841,7 +842,7 @@ class GreasePencilLayerMasksPanel:
row = layout.row()
col = row.column()
col.template_list("GPENCIL_UL_masks", "", gpl, "mask_layers", gpl.mask_layers,
- "active_mask_index", rows=rows, sort_lock=True)
+ "active_mask_index", rows=rows, sort_lock=True)
col2 = row.column(align=True)
col2.menu("GPENCIL_MT_layer_mask_menu", icon='ADD', text="")
@@ -880,12 +881,17 @@ class GreasePencilLayerDisplayPanel:
gpd = ob.data
gpl = gpd.layers.active
- col = layout.row(align=True)
- col.prop(gpl, "channel_color")
+ use_colors = context.preferences.edit.use_anim_channel_group_colors
- col = layout.row(align=True)
- col.prop(gpl, "use_solo_mode", text="Show Only On Keyframed")
+ col = layout.column(align=True)
+ col.active = use_colors
+ row = col.row(align=True)
+ row.prop(gpl, "channel_color")
+ if not use_colors:
+ col.label(text="Channel Colors are disabled in Animation preferences")
+ row = layout.row(align=True)
+ row.prop(gpl, "use_solo_mode", text="Show Only on Keyframed")
class GreasePencilFlipTintColors(Operator):
bl_label = "Flip Colors"
diff --git a/release/scripts/startup/bl_ui/properties_mask_common.py b/release/scripts/startup/bl_ui/properties_mask_common.py
index 6ee755722f3..4d25b8ca309 100644
--- a/release/scripts/startup/bl_ui/properties_mask_common.py
+++ b/release/scripts/startup/bl_ui/properties_mask_common.py
@@ -37,7 +37,7 @@ def draw_mask_context_menu(layout, context):
layout.separator()
- layout.operator("mask.shape_key_rekey", text="Re-key Shape Points")
+ layout.operator("mask.shape_key_rekey", text="Re-Key Shape Points")
layout.operator("mask.feather_weight_clear")
layout.operator("mask.shape_key_feather_reset", text="Reset Feather Animation")
diff --git a/release/scripts/startup/bl_ui/properties_material_gpencil.py b/release/scripts/startup/bl_ui/properties_material_gpencil.py
index 5d10a2cef4a..7c8f6b2309a 100644
--- a/release/scripts/startup/bl_ui/properties_material_gpencil.py
+++ b/release/scripts/startup/bl_ui/properties_material_gpencil.py
@@ -39,7 +39,7 @@ class GPENCIL_MT_material_context_menu(Menu):
layout.separator()
layout.operator("gpencil.material_lock_all", icon='LOCKED', text="Lock All")
- layout.operator("gpencil.material_unlock_all", icon='UNLOCKED', text="UnLock All")
+ layout.operator("gpencil.material_unlock_all", icon='UNLOCKED', text="Unlock All")
layout.operator("gpencil.material_lock_unused", text="Lock Unselected")
layout.operator("gpencil.lock_layer", text="Lock Unused")
@@ -70,6 +70,7 @@ class GPENCIL_UL_matslots(UIList):
row.prop(ma, "name", text="", emboss=False, icon_value=icon)
row = layout.row(align=True)
+
if gpcolor.ghost is True:
icon = 'ONIONSKIN_OFF'
else:
@@ -147,8 +148,8 @@ class MATERIAL_PT_gpencil_strokecolor(GPMaterialButtonsPanel, Panel):
col.prop(gpcolor, "stroke_style", text="Style")
- row = col.row()
- row.prop(gpcolor, "color", text="Base Color")
+ col.prop(gpcolor, "color", text="Base Color")
+ col.prop(gpcolor, "use_stroke_holdout")
if gpcolor.stroke_style == 'TEXTURE':
row = col.row()
@@ -164,6 +165,7 @@ class MATERIAL_PT_gpencil_strokecolor(GPMaterialButtonsPanel, Panel):
if gpcolor.mode in {'DOTS', 'BOX'}:
col.prop(gpcolor, "alignment_mode")
+ col.prop(gpcolor, "alignment_rotation")
if gpcolor.mode == 'LINE':
col.prop(gpcolor, "use_overlap_strokes")
@@ -193,12 +195,14 @@ class MATERIAL_PT_gpencil_fillcolor(GPMaterialButtonsPanel, Panel):
if gpcolor.fill_style == 'SOLID':
col.prop(gpcolor, "fill_color", text="Base Color")
+ col.prop(gpcolor, "use_fill_holdout")
elif gpcolor.fill_style == 'GRADIENT':
col.prop(gpcolor, "gradient_type")
col.prop(gpcolor, "fill_color", text="Base Color")
col.prop(gpcolor, "mix_color", text="Secondary Color")
+ col.prop(gpcolor, "use_fill_holdout")
col.prop(gpcolor, "mix_factor", text="Blend", slider=True)
col.prop(gpcolor, "flip", text="Flip Colors")
@@ -212,6 +216,7 @@ class MATERIAL_PT_gpencil_fillcolor(GPMaterialButtonsPanel, Panel):
elif gpcolor.fill_style == 'TEXTURE':
col.prop(gpcolor, "fill_color", text="Base Color")
+ col.prop(gpcolor, "use_fill_holdout")
col.template_ID(gpcolor, "fill_image", open="image.open")
diff --git a/release/scripts/startup/bl_ui/properties_object.py b/release/scripts/startup/bl_ui/properties_object.py
index b142f6085fa..7101a78e18f 100644
--- a/release/scripts/startup/bl_ui/properties_object.py
+++ b/release/scripts/startup/bl_ui/properties_object.py
@@ -141,6 +141,7 @@ class OBJECT_PT_relations(ObjectButtonsPanel, Panel):
if parent and ob.parent_type == 'BONE' and parent.type == 'ARMATURE':
sub.prop_search(ob, "parent_bone", parent.data, "bones")
sub.active = (parent is not None)
+ sub.prop(ob, "use_camera_lock_parent")
col.separator()
@@ -364,7 +365,7 @@ class OBJECT_PT_visibility(ObjectButtonsPanel, Panel):
layout.prop(ob, "hide_select", text="Selectable", toggle=False, invert_checkbox=True)
- col = layout.column(heading="Show in")
+ col = layout.column(heading="Show In")
col.prop(ob, "hide_viewport", text="Viewports", toggle=False, invert_checkbox=True)
col.prop(ob, "hide_render", text="Renders", toggle=False, invert_checkbox=True)
diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py
index d5f48876491..63ccbd2ae05 100644
--- a/release/scripts/startup/bl_ui/properties_paint_common.py
+++ b/release/scripts/startup/bl_ui/properties_paint_common.py
@@ -330,7 +330,7 @@ class StrokePanel(BrushPanel):
col.separator()
if brush.use_anchor:
- col.prop(brush, "use_edge_to_edge", text="Edge To Edge")
+ col.prop(brush, "use_edge_to_edge", text="Edge to Edge")
if brush.use_airbrush:
col.prop(brush, "rate", text="Rate", slider=True)
@@ -485,7 +485,7 @@ class DisplayPanel(BrushPanel):
col.prop(brush, "cursor_color_add", text="Cursor Color")
if mode == 'SCULPT' and brush.sculpt_capabilities.has_secondary_color:
- col.prop(brush, "cursor_color_subtract", text="Inverse Cursor Color")
+ col.prop(brush, "cursor_color_subtract", text="Inverse Color")
col.separator()
@@ -547,10 +547,14 @@ def brush_settings(layout, context, brush, popover=False):
# normal_radius_factor
layout.prop(brush, "normal_radius_factor", slider=True)
+ if context.preferences.experimental.use_sculpt_tools_tilt and capabilities.has_tilt:
+ layout.prop(brush, "tilt_strength_factor", slider=True)
+
+
row = layout.row(align=True)
row.prop(brush, "hardness", slider=True)
- row.prop(brush, "invert_hardness_pressure", text = "")
- row.prop(brush, "use_hardness_pressure", text = "")
+ row.prop(brush, "invert_hardness_pressure", text="")
+ row.prop(brush, "use_hardness_pressure", text="")
# auto_smooth_factor and use_inverse_smooth_pressure
if capabilities.has_auto_smooth:
@@ -648,9 +652,9 @@ def brush_settings(layout, context, brush, popover=False):
layout.prop(brush, "pose_offset")
layout.prop(brush, "pose_smooth_iterations")
if brush.pose_deform_type == 'ROTATE_TWIST' and brush.pose_origin_type in {'TOPOLOGY', 'FACE_SETS'}:
- layout.prop(brush, "pose_ik_segments")
+ layout.prop(brush, "pose_ik_segments")
if brush.pose_deform_type == 'SCALE_TRANSLATE':
- layout.prop(brush, "use_pose_lock_rotation")
+ layout.prop(brush, "use_pose_lock_rotation")
layout.prop(brush, "use_pose_ik_anchored")
layout.prop(brush, "use_connected_only")
layout.prop(brush, "disconnected_distance_max")
@@ -660,9 +664,11 @@ def brush_settings(layout, context, brush, popover=False):
elif sculpt_tool == 'CLOTH':
layout.separator()
layout.prop(brush, "cloth_simulation_area_type")
- if brush.cloth_simulation_area_type == 'LOCAL':
+ if brush.cloth_simulation_area_type != 'GLOBAL':
layout.prop(brush, "cloth_sim_limit")
layout.prop(brush, "cloth_sim_falloff")
+
+ if brush.cloth_simulation_area_type == 'LOCAL':
layout.prop(brush, "use_cloth_pin_simulation_boundary")
layout.separator()
@@ -692,27 +698,28 @@ def brush_settings(layout, context, brush, popover=False):
elif sculpt_tool == 'GRAB':
layout.prop(brush, "use_grab_active_vertex")
+ layout.prop(brush, "use_grab_silhouette")
elif sculpt_tool == 'PAINT':
row = layout.row(align=True)
row.prop(brush, "flow")
- row.prop(brush, "invert_flow_pressure", text = "")
- row.prop(brush, "use_flow_pressure", text= "")
+ row.prop(brush, "invert_flow_pressure", text="")
+ row.prop(brush, "use_flow_pressure", text="")
row = layout.row(align=True)
row.prop(brush, "wet_mix")
- row.prop(brush, "invert_wet_mix_pressure", text = "")
- row.prop(brush, "use_wet_mix_pressure", text = "")
+ row.prop(brush, "invert_wet_mix_pressure", text="")
+ row.prop(brush, "use_wet_mix_pressure", text="")
row = layout.row(align=True)
row.prop(brush, "wet_persistence")
- row.prop(brush, "invert_wet_persistence_pressure", text ="")
- row.prop(brush, "use_wet_persistence_pressure", text= "")
+ row.prop(brush, "invert_wet_persistence_pressure", text="")
+ row.prop(brush, "use_wet_persistence_pressure", text="")
row = layout.row(align=True)
row.prop(brush, "density")
- row.prop(brush, "invert_density_pressure", text = "")
- row.prop(brush, "use_density_pressure", text = "")
+ row.prop(brush, "invert_density_pressure", text="")
+ row.prop(brush, "use_density_pressure", text="")
row = layout.row()
row.prop(brush, "tip_roundness")
@@ -1017,10 +1024,7 @@ def brush_texture_settings(layout, brush, sculpt):
layout.use_property_decorate = False
# map_mode
- if sculpt:
- layout.prop(tex_slot, "map_mode", text="Mapping")
- else:
- layout.prop(tex_slot, "tex_paint_map_mode", text="Mapping")
+ layout.prop(tex_slot, "map_mode", text="Mapping")
layout.separator()
@@ -1118,6 +1122,7 @@ def brush_basic_texpaint_settings(layout, context, brush, *, compact=False):
header=True
)
+
def brush_basic__draw_color_selector(context, layout, brush, gp_settings, props):
tool_settings = context.scene.tool_settings
settings = tool_settings.gpencil_paint
@@ -1148,16 +1153,25 @@ def brush_basic__draw_color_selector(context, layout, brush, gp_settings, props)
if brush.gpencil_tool in {'DRAW', 'FILL'}:
row.separator(factor=1.0)
- row.prop_enum(settings, "color_mode", 'MATERIAL', text="", icon='MATERIAL')
- row.prop_enum(settings, "color_mode", 'VERTEXCOLOR', text="", icon='VPAINT_HLT')
sub_row = row.row(align=True)
- sub_row.enabled = settings.color_mode == 'VERTEXCOLOR'
+ sub_row.enabled = not gp_settings.pin_draw_mode
+ if gp_settings.pin_draw_mode:
+ sub_row.prop_enum(gp_settings, "brush_draw_mode", 'MATERIAL', text="", icon='MATERIAL')
+ sub_row.prop_enum(gp_settings, "brush_draw_mode", 'VERTEXCOLOR', text="", icon='VPAINT_HLT')
+ else:
+ sub_row.prop_enum(settings, "color_mode", 'MATERIAL', text="", icon='MATERIAL')
+ sub_row.prop_enum(settings, "color_mode", 'VERTEXCOLOR', text="", icon='VPAINT_HLT')
+
+ sub_row = row.row(align=True)
+ sub_row.enabled = settings.color_mode == 'VERTEXCOLOR' or gp_settings.brush_draw_mode == 'VERTEXCOLOR'
sub_row.prop_with_popover(brush, "color", text="", panel="TOPBAR_PT_gpencil_vertexcolor")
+ row.prop(gp_settings, "pin_draw_mode", text="")
if props:
row = layout.row(align=True)
row.prop(props, "subdivision")
+
def brush_basic_gpencil_paint_settings(layout, context, brush, *, compact=False):
tool_settings = context.tool_settings
settings = tool_settings.gpencil_paint
@@ -1206,7 +1220,7 @@ def brush_basic_gpencil_paint_settings(layout, context, brush, *, compact=False)
if gp_settings.use_pressure and context.area.type == 'PROPERTIES':
col = layout.column()
col.template_curve_mapping(gp_settings, "curve_sensitivity", brush=True,
- use_negative_slope=True)
+ use_negative_slope=True)
row = layout.row(align=True)
row.prop(gp_settings, "pen_strength", slider=True)
@@ -1215,7 +1229,7 @@ def brush_basic_gpencil_paint_settings(layout, context, brush, *, compact=False)
if gp_settings.use_strength_pressure and context.area.type == 'PROPERTIES':
col = layout.column()
col.template_curve_mapping(gp_settings, "curve_strength", brush=True,
- use_negative_slope=True)
+ use_negative_slope=True)
if brush.gpencil_tool == 'TINT':
row = layout.row(align=True)
diff --git a/release/scripts/startup/bl_ui/properties_particle.py b/release/scripts/startup/bl_ui/properties_particle.py
index f1dd6a1c890..60caa39b723 100644
--- a/release/scripts/startup/bl_ui/properties_particle.py
+++ b/release/scripts/startup/bl_ui/properties_particle.py
@@ -618,7 +618,6 @@ class PARTICLE_PT_rotation(ParticleButtonsPanel, Panel):
layout.prop(part, "use_rotations", text="")
layout.enabled = particle_panel_enabled(context, psys)
-
def draw(self, context):
layout = self.layout
diff --git a/release/scripts/startup/bl_ui/properties_physics_common.py b/release/scripts/startup/bl_ui/properties_physics_common.py
index db33fda3b17..b8c0035ee6b 100644
--- a/release/scripts/startup/bl_ui/properties_physics_common.py
+++ b/release/scripts/startup/bl_ui/properties_physics_common.py
@@ -228,7 +228,7 @@ def point_cache_ui(self, cache, enabled, cachetype):
sub = col.row()
sub.enabled = enabled
- sub.operator("ptcache.bake", text="Calculate To Frame").bake = False
+ sub.operator("ptcache.bake", text="Calculate to Frame").bake = False
sub = col.column()
sub.enabled = enabled
@@ -237,7 +237,7 @@ def point_cache_ui(self, cache, enabled, cachetype):
col = flow.column()
col.operator("ptcache.bake_all", text="Bake All Dynamics").bake = True
col.operator("ptcache.free_bake_all", text="Delete All Bakes")
- col.operator("ptcache.bake_all", text="Update All To Frame").bake = False
+ col.operator("ptcache.bake_all", text="Update All to Frame").bake = False
def effector_weights_ui(self, weights, weight_type):
@@ -363,6 +363,7 @@ def basic_force_field_falloff_ui(self, field):
sub.prop(field, "distance_max", text="")
row.prop_decorator(field, "distance_max")
+
classes = (
PHYSICS_PT_add,
)
diff --git a/release/scripts/startup/bl_ui/properties_physics_field.py b/release/scripts/startup/bl_ui/properties_physics_field.py
index d1ff1dc9f5e..c8c49ee02b0 100644
--- a/release/scripts/startup/bl_ui/properties_physics_field.py
+++ b/release/scripts/startup/bl_ui/properties_physics_field.py
@@ -102,7 +102,7 @@ class PHYSICS_PT_field_settings(PhysicButtonsPanel, Panel):
col.separator()
col = flow.column()
- col.prop(field, "guide_clump_amount", text="Clumping amount")
+ col.prop(field, "guide_clump_amount", text="Clumping Amount")
col.prop(field, "guide_clump_shape")
col.prop(field, "use_max_distance")
@@ -378,7 +378,7 @@ class PHYSICS_PT_collision_particle(PhysicButtonsPanel, Panel):
class PHYSICS_PT_collision_softbody(PhysicButtonsPanel, Panel):
- bl_label = "Softbody And Cloth"
+ bl_label = "Softbody & Cloth"
bl_parent_id = "PHYSICS_PT_collision"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
diff --git a/release/scripts/startup/bl_ui/properties_physics_fluid.py b/release/scripts/startup/bl_ui/properties_physics_fluid.py
index 427f8c2c85f..3afe7a47028 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fluid.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fluid.py
@@ -196,18 +196,32 @@ class PHYSICS_PT_settings(PhysicButtonsPanel, Panel):
col = flow.column()
if PhysicButtonsPanel.poll_gas_domain(context):
col.prop(domain, "clipping", text="Empty Space")
- col.prop(domain, "delete_in_obstacle", text="Delete In Obstacle")
+ col.prop(domain, "delete_in_obstacle", text="Delete in Obstacle")
if domain.cache_type == 'MODULAR':
col.separator()
+ label = ""
# Deactivate bake operator if guides are enabled but not baked yet.
note_flag = True
- if self.check_domain_has_unbaked_guide(domain) and domain.cache_type == 'MODULAR':
- note = layout.split()
+ if self.check_domain_has_unbaked_guide(domain):
note_flag = False
+ label = "Unbaked Guides: Bake Guides or disable them"
+ elif not domain.cache_resumable and not label:
+ label = "Non Resumable Cache: Baking "
+ if PhysicButtonsPanel.poll_liquid_domain(context):
+ label += "mesh or particles will not be possible"
+ elif PhysicButtonsPanel.poll_gas_domain(context):
+ label += "noise will not be possible"
+ else:
+ label = ""
+
+ if label:
+ info = layout.split()
+ note = info.row()
note.enabled = note_flag
- note.label(icon='INFO', text="Unbaked Guides: Bake Guides or disable them")
+ note.alignment = 'RIGHT'
+ note.label(icon='INFO', text=label)
split = layout.split()
split.enabled = note_flag and ob.mode == 'OBJECT'
@@ -472,7 +486,8 @@ class PHYSICS_PT_liquid(PhysicButtonsPanel, Panel):
col = flow.column()
col.prop(domain, "simulation_method", expand=False)
- col.prop(domain, "flip_ratio", text="FLIP Ratio")
+ if domain.simulation_method == 'FLIP':
+ col.prop(domain, "flip_ratio", text="FLIP Ratio")
col.prop(domain, "sys_particle_maximum", text="System Maximum")
col = col.column(align=True)
col.prop(domain, "particle_radius", text="Particle Radius")
@@ -493,7 +508,8 @@ class PHYSICS_PT_liquid(PhysicButtonsPanel, Panel):
col.prop(domain, "use_fractions", text="Fractional Obstacles")
sub = col.column()
sub.active = domain.use_fractions
- sub.prop(domain, "fractions_threshold", text="Obstacle-Fluid Threshold")
+ sub.prop(domain, "fractions_distance", text="Obstacle Distance")
+ sub.prop(domain, "fractions_threshold", text="Threshold")
class PHYSICS_PT_flow_source(PhysicButtonsPanel, Panel):
@@ -731,17 +747,19 @@ class PHYSICS_PT_noise(PhysicButtonsPanel, Panel):
# Deactivate bake operator if data has not been baked yet.
note_flag = True
- if domain.use_noise and domain.cache_type == 'MODULAR':
+ if domain.use_noise:
label = ""
- if not domain.has_cache_baked_data:
- label = "Unbaked Data: Bake Data first"
if not domain.cache_resumable:
label = "Non Resumable Cache: Enable resumable option first"
+ elif not domain.has_cache_baked_data:
+ label = "Unbaked Data: Bake Data first"
if label:
- note = layout.split()
+ info = layout.split()
+ note = info.row()
note_flag = False
note.enabled = note_flag
+ note.alignment = 'RIGHT'
note.label(icon='INFO', text=label)
split = layout.split()
@@ -824,17 +842,19 @@ class PHYSICS_PT_mesh(PhysicButtonsPanel, Panel):
# Deactivate bake operator if data has not been baked yet.
note_flag = True
- if domain.use_mesh and domain.cache_type == 'MODULAR':
+ if domain.use_mesh:
label = ""
- if not domain.has_cache_baked_data:
- label = "Unbaked Data: Bake Data first"
if not domain.cache_resumable:
label = "Non Resumable Cache: Enable resumable option first"
+ elif not domain.has_cache_baked_data:
+ label = "Unbaked Data: Bake Data first"
if label:
- note = layout.split()
+ info = layout.split()
+ note = info.row()
note_flag = False
note.enabled = note_flag
+ note.alignment = 'RIGHT'
note.label(icon='INFO', text=label)
split = layout.split()
@@ -945,17 +965,19 @@ class PHYSICS_PT_particles(PhysicButtonsPanel, Panel):
# Deactivate bake operator if data has not been baked yet.
note_flag = True
- if using_particles and domain.cache_type == 'MODULAR':
+ if using_particles:
label = ""
- if not domain.has_cache_baked_data:
- label = "Unbaked Data: Bake Data first"
if not domain.cache_resumable:
label = "Non Resumable Cache: Enable resumable option first"
+ elif not domain.has_cache_baked_data:
+ label = "Unbaked Data: Bake Data first"
if label:
- note = layout.split()
+ info = layout.split()
+ note = info.row()
note_flag = False
note.enabled = note_flag
+ note.alignment = 'RIGHT'
note.label(icon='INFO', text=label)
split = layout.split()
@@ -1184,7 +1206,6 @@ class PHYSICS_PT_cache(PhysicButtonsPanel, Panel):
row.prop(domain, "cache_mesh_format", text="Meshes")
if domain.cache_type == 'ALL':
-
col.separator()
split = layout.split()
split.enabled = ob.mode == 'OBJECT'
@@ -1213,7 +1234,10 @@ class PHYSICS_PT_export(PhysicButtonsPanel, Panel):
@classmethod
def poll(cls, context):
domain = context.fluid.domain_settings
- if not PhysicButtonsPanel.poll_fluid_domain(context) or (domain.cache_data_format != 'OPENVDB' and bpy.app.debug_value != 3001):
+ if (
+ not PhysicButtonsPanel.poll_fluid_domain(context) or
+ (domain.cache_data_format != 'OPENVDB' and bpy.app.debug_value != 3001)
+ ):
return False
return (context.engine in cls.COMPAT_ENGINES)
@@ -1271,7 +1295,7 @@ class PHYSICS_PT_viewport_display(PhysicButtonsPanel, Panel):
@classmethod
def poll(cls, context):
- return (PhysicButtonsPanel.poll_gas_domain(context))
+ return (PhysicButtonsPanel.poll_fluid_domain(context))
def draw(self, context):
layout = self.layout
@@ -1279,41 +1303,61 @@ class PHYSICS_PT_viewport_display(PhysicButtonsPanel, Panel):
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=True)
domain = context.fluid.domain_settings
- slice_method = domain.slice_method
- axis_slice_method = domain.axis_slice_method
-
- do_axis_slicing = (slice_method == 'AXIS_ALIGNED')
- do_full_slicing = (axis_slice_method == 'FULL')
col = flow.column(align=False)
col.prop(domain, "display_thickness")
- col.prop(domain, "display_interpolation")
- col.separator()
- col = flow.column()
- col.prop(domain, "slice_method", text="Slicing")
-
- col = col.column()
- col.active = do_axis_slicing
- col.prop(domain, "axis_slice_method")
+ sub = col.column()
+ sub.prop(domain, "display_interpolation")
- if not do_full_slicing and do_axis_slicing:
- col.prop(domain, "slice_axis")
- col.prop(domain, "slice_depth")
+ if domain.use_color_ramp and domain.color_ramp_field == 'FLAGS':
+ sub.enabled = False
col = col.column()
- col.active = do_full_slicing or not do_axis_slicing
+ col.active = not domain.use_slice
col.prop(domain, "slice_per_voxel")
+class PHYSICS_PT_viewport_display_slicing(PhysicButtonsPanel, Panel):
+ bl_label = "Slice"
+ bl_parent_id = 'PHYSICS_PT_viewport_display'
+ bl_options = {'DEFAULT_CLOSED'}
+
+ @classmethod
+ def poll(cls, context):
+ return (PhysicButtonsPanel.poll_fluid_domain(context))
+
+ def draw_header(self, context):
+ md = context.fluid.domain_settings
+
+ self.layout.prop(md, "use_slice", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+
+ domain = context.fluid.domain_settings
+
+ layout.active = domain.use_slice
+
+ col = layout.column()
+ col.prop(domain, "slice_axis")
+ col.prop(domain, "slice_depth")
+
+ sub = col.column()
+ sub.prop(domain, "show_gridlines")
+
+ sub.active = domain.display_interpolation == 'CLOSEST' or domain.color_ramp_field == 'FLAGS'
+
+
class PHYSICS_PT_viewport_display_color(PhysicButtonsPanel, Panel):
- bl_label = "Color Mapping"
+ bl_label = "Grid Display"
bl_parent_id = 'PHYSICS_PT_viewport_display'
bl_options = {'DEFAULT_CLOSED'}
@classmethod
def poll(cls, context):
- return (PhysicButtonsPanel.poll_gas_domain(context))
+ return (PhysicButtonsPanel.poll_fluid_domain(context))
def draw_header(self, context):
md = context.fluid.domain_settings
@@ -1327,22 +1371,26 @@ class PHYSICS_PT_viewport_display_color(PhysicButtonsPanel, Panel):
domain = context.fluid.domain_settings
col = layout.column()
col.active = domain.use_color_ramp
- col.prop(domain, "coba_field")
+ col.prop(domain, "color_ramp_field")
+
+ if not domain.color_ramp_field == 'FLAGS':
+ col.prop(domain, "color_ramp_field_scale")
col.use_property_split = False
- col = col.column()
- col.template_color_ramp(domain, "color_ramp", expand=True)
+ if domain.color_ramp_field[:3] != 'PHI' and domain.color_ramp_field not in {'FLAGS', 'PRESSURE'}:
+ col = col.column()
+ col.template_color_ramp(domain, "color_ramp", expand=True)
class PHYSICS_PT_viewport_display_debug(PhysicButtonsPanel, Panel):
- bl_label = "Debug Velocity"
+ bl_label = "Vector Display"
bl_parent_id = 'PHYSICS_PT_viewport_display'
bl_options = {'DEFAULT_CLOSED'}
@classmethod
def poll(cls, context):
- return (PhysicButtonsPanel.poll_gas_domain(context))
+ return (PhysicButtonsPanel.poll_fluid_domain(context))
def draw_header(self, context):
md = context.fluid.domain_settings
@@ -1359,9 +1407,58 @@ class PHYSICS_PT_viewport_display_debug(PhysicButtonsPanel, Panel):
col = flow.column()
col.active = domain.show_velocity
col.prop(domain, "vector_display_type", text="Display As")
+
+ if not domain.use_guide and domain.vector_field == 'GUIDE_VELOCITY':
+ note = layout.split()
+ note.label(icon='INFO', text="Enable Guides first! Defaulting to Fluid Velocity")
+
+ if domain.vector_display_type == 'MAC':
+ sub = col.column(heading="MAC Grid")
+ sub.prop(domain, "vector_show_mac_x")
+ sub.prop(domain, "vector_show_mac_y")
+ sub.prop(domain, "vector_show_mac_z")
+ else:
+ col.prop(domain, "vector_scale_with_magnitude")
+
+ col.prop(domain, "vector_field")
col.prop(domain, "vector_scale")
+class PHYSICS_PT_viewport_display_advanced(PhysicButtonsPanel, Panel):
+ bl_label = "Advanced"
+ bl_parent_id = 'PHYSICS_PT_viewport_display'
+ bl_options = {'DEFAULT_CLOSED'}
+
+ @classmethod
+ def poll(cls, context):
+ domain = context.fluid.domain_settings
+ return PhysicButtonsPanel.poll_fluid_domain(context) and domain.use_slice and domain.show_gridlines
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+
+ domain = context.fluid.domain_settings
+
+ layout.active = domain.display_interpolation == 'CLOSEST' or domain.color_ramp_field == 'FLAGS'
+
+ col = layout.column()
+ col.prop(domain, "gridlines_color_field", text="Color Gridlines")
+
+ if domain.gridlines_color_field == 'RANGE':
+ if domain.use_color_ramp and domain.color_ramp_field != 'FLAGS':
+ col.prop(domain, "gridlines_lower_bound")
+ col.prop(domain, "gridlines_upper_bound")
+ col.prop(domain, "gridlines_range_color")
+ col.prop(domain, "gridlines_cell_filter")
+ else:
+ note = layout.split()
+ if not domain.use_color_ramp:
+ note.label(icon='INFO', text="Enable Grid Display to use range highlighting!")
+ else:
+ note.label(icon='INFO', text="Range highlighting for flags is not available!")
+
+
classes = (
FLUID_PT_presets,
PHYSICS_PT_fluid,
@@ -1385,8 +1482,10 @@ classes = (
PHYSICS_PT_flow_initial_velocity,
PHYSICS_PT_flow_texture,
PHYSICS_PT_viewport_display,
+ PHYSICS_PT_viewport_display_slicing,
PHYSICS_PT_viewport_display_color,
PHYSICS_PT_viewport_display_debug,
+ PHYSICS_PT_viewport_display_advanced,
)
diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index 7995cf21877..ae2a7a8ccb9 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -173,7 +173,9 @@ class RENDER_PT_eevee_motion_blur(RenderButtonsPanel, Panel):
layout.active = props.use_motion_blur
col = layout.column()
+ col.prop(props, "motion_blur_position", text="Position")
col.prop(props, "motion_blur_shutter")
+ col.separator()
col.prop(props, "motion_blur_depth_scale")
col.prop(props, "motion_blur_max")
col.prop(props, "motion_blur_steps", text="Steps")
@@ -656,6 +658,9 @@ class RENDER_PT_simplify_viewport(RenderButtonsPanel, Panel):
col = flow.column()
col.prop(rd, "simplify_child_particles", text="Max Child Particles")
+ col = flow.column()
+ col.prop(rd, "simplify_volumes", text="Volume Resolution")
+
class RENDER_PT_simplify_render(RenderButtonsPanel, Panel):
bl_label = "Render"
diff --git a/release/scripts/startup/bl_ui/properties_texture.py b/release/scripts/startup/bl_ui/properties_texture.py
index 5af8bc2aaa7..368494793a5 100644
--- a/release/scripts/startup/bl_ui/properties_texture.py
+++ b/release/scripts/startup/bl_ui/properties_texture.py
@@ -104,7 +104,7 @@ class TEXTURE_PT_preview(TextureButtonsPanel, Panel):
else:
layout.template_preview(tex, slot=slot)
- # Show Alpha Button for Brush Textures, see #29502
+ # Show Alpha Button for Brush Textures, see T29502.
idblock = context_tex_datablock(context)
if isinstance(idblock, Brush):
layout.prop(tex, "use_preview_alpha")
diff --git a/release/scripts/startup/bl_ui/properties_view_layer.py b/release/scripts/startup/bl_ui/properties_view_layer.py
index 36bbf78d8ab..afa00bb50c2 100644
--- a/release/scripts/startup/bl_ui/properties_view_layer.py
+++ b/release/scripts/startup/bl_ui/properties_view_layer.py
@@ -134,6 +134,7 @@ class VIEWLAYER_PT_eevee_layer_passes_effects(ViewLayerButtonsPanel, Panel):
col.prop(view_layer_eevee, "use_pass_bloom", text="Bloom")
col.active = scene_eevee.use_bloom
+
classes = (
VIEWLAYER_PT_layer,
VIEWLAYER_PT_eevee_layer_passes,
diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py
index 43883ff0f3a..a0cf22877d5 100644
--- a/release/scripts/startup/bl_ui/space_clip.py
+++ b/release/scripts/startup/bl_ui/space_clip.py
@@ -423,7 +423,7 @@ class CLIP_PT_tracking_settings(CLIP_PT_tracking_panel, Panel):
col.separator()
col.operator("clip.track_settings_as_default",
- text="Copy From Active Track")
+ text="Copy from Active Track")
class CLIP_PT_tracking_settings_extras(CLIP_PT_tracking_panel, Panel):
@@ -532,6 +532,7 @@ class CLIP_PT_tools_solve(CLIP_PT_tracking_panel, Panel):
tracking = clip.tracking
settings = tracking.settings
tracking_object = tracking.objects.active
+ camera = clip.tracking.camera
col = layout.column()
col.prop(settings, "use_tripod_solver", text="Tripod")
@@ -545,9 +546,16 @@ class CLIP_PT_tools_solve(CLIP_PT_tracking_panel, Panel):
col.prop(tracking_object, "keyframe_a")
col.prop(tracking_object, "keyframe_b")
- col = layout.column()
+ col = layout.column(heading="Refine", align=True)
col.active = tracking_object.is_camera
- col.prop(settings, "refine_intrinsics", text="Refine")
+ col.prop(settings, "refine_intrinsics_focal_length", text="Focal Length")
+ col.prop(settings, "refine_intrinsics_principal_point", text="Optical Center")
+
+ col.prop(settings, "refine_intrinsics_radial_distortion", text="Radial Distortion")
+
+ row = col.row()
+ row.active = (camera.distortion_model == 'BROWN')
+ row.prop(settings, "refine_intrinsics_tangential_distortion", text="Tangential Distortion")
col = layout.column(align=True)
col.scale_y = 2.0
@@ -560,7 +568,7 @@ class CLIP_PT_tools_solve(CLIP_PT_tracking_panel, Panel):
class CLIP_PT_tools_cleanup(CLIP_PT_tracking_panel, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'TOOLS'
- bl_label = "Clean up"
+ bl_label = "Clean Up"
bl_options = {'DEFAULT_CLOSED'}
bl_category = "Solve"
@@ -869,16 +877,13 @@ class CLIP_PT_tracking_camera(Panel):
col.prop(clip.tracking.camera, "sensor_width", text="Sensor Width")
col.prop(clip.tracking.camera, "pixel_aspect", text="Pixel Aspect")
- col = layout.column()
- col.prop(clip.tracking.camera, "principal", text="Optical Center")
- col.operator("clip.set_center_principal", text="Set Center")
-
class CLIP_PT_tracking_lens(Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
bl_category = "Track"
bl_label = "Lens"
+ bl_parent_id = 'CLIP_PT_tracking_camera'
bl_options = {'DEFAULT_CLOSED'}
@classmethod
@@ -908,6 +913,10 @@ class CLIP_PT_tracking_lens(Panel):
col.prop(camera, "units", text="Units")
col = layout.column()
+ col.prop(clip.tracking.camera, "principal", text="Optical Center")
+ col.operator("clip.set_center_principal", text="Set Center")
+
+ col = layout.column()
col.prop(camera, "distortion_model", text="Lens Distortion")
if camera.distortion_model == 'POLYNOMIAL':
col = layout.column(align=True)
@@ -922,6 +931,15 @@ class CLIP_PT_tracking_lens(Panel):
col = layout.column(align=True)
col.prop(camera, "nuke_k1")
col.prop(camera, "nuke_k2")
+ elif camera.distortion_model == 'BROWN':
+ col = layout.column(align=True)
+ col.prop(camera, "brown_k1")
+ col.prop(camera, "brown_k2")
+ col.prop(camera, "brown_k3")
+ col.prop(camera, "brown_k4")
+ col.separator()
+ col.prop(camera, "brown_p1")
+ col.prop(camera, "brown_p2")
class CLIP_PT_marker(CLIP_PT_tracking_panel, Panel):
@@ -990,9 +1008,9 @@ class CLIP_PT_stabilization(CLIP_PT_reconstruction_panel, Panel):
row.prop(stab, "show_tracks_expanded", text="", emboss=False)
if not stab.show_tracks_expanded:
- row.label(text="Tracks For Stabilization")
+ row.label(text="Tracks for Stabilization")
else:
- row.label(text="Tracks For Location")
+ row.label(text="Tracks for Location")
row = box.row()
row.template_list("UI_UL_list", "stabilization_tracks", stab, "tracks",
stab, "active_track_index", rows=2)
@@ -1008,7 +1026,7 @@ class CLIP_PT_stabilization(CLIP_PT_reconstruction_panel, Panel):
# Usually we don't hide things from interface, but here every pixel of
# vertical space is precious.
if stab.use_stabilize_rotation:
- box.label(text="Tracks For Rotation / Scale")
+ box.label(text="Tracks for Rotation/Scale")
row = box.row()
row.template_list("UI_UL_list", "stabilization_rotation_tracks",
stab, "rotation_tracks",
diff --git a/release/scripts/startup/bl_ui/space_dopesheet.py b/release/scripts/startup/bl_ui/space_dopesheet.py
index 3f8c41e4f21..676e93f4ce9 100644
--- a/release/scripts/startup/bl_ui/space_dopesheet.py
+++ b/release/scripts/startup/bl_ui/space_dopesheet.py
@@ -228,13 +228,7 @@ class DOPESHEET_HT_header(Header):
# Header for "normal" dopesheet editor modes (e.g. Dope Sheet, Action, Shape Keys, etc.)
-class DOPESHEET_HT_editor_buttons(Header):
- bl_idname = "DOPESHEET_HT_editor_buttons"
- bl_space_type = 'DOPESHEET_EDITOR'
- bl_label = ""
-
- def draw(self, context):
- pass
+class DOPESHEET_HT_editor_buttons:
@staticmethod
def draw_header(context, layout):
@@ -342,13 +336,17 @@ class DOPESHEET_MT_view(Menu):
layout.separator()
- layout.prop(st.dopesheet, "use_multi_word_filter", text="Multi-word Match Search")
+ layout.prop(st.dopesheet, "use_multi_word_filter", text="Multi-Word Match Search")
layout.separator()
layout.prop(st, "use_realtime_update")
- layout.prop(st, "show_sliders")
- layout.prop(st, "show_group_colors")
+
+ # Sliders are always shown in the Shape Key Editor regardless of this setting.
+ col = layout.column()
+ col.active = context.space_data.mode != 'SHAPEKEY'
+ col.prop(st, "show_sliders")
+
layout.prop(st, "show_interpolation")
layout.prop(st, "show_extremes")
layout.prop(st, "use_auto_merge_keyframes")
@@ -669,10 +667,10 @@ class DOPESHEET_MT_snap_pie(Menu):
layout = self.layout
pie = layout.menu_pie()
- pie.operator("action.snap", text="Current Frame").type = 'CFRA'
- pie.operator("action.snap", text="Nearest Frame").type = 'NEAREST_FRAME'
- pie.operator("action.snap", text="Nearest Second").type = 'NEAREST_SECOND'
- pie.operator("action.snap", text="Nearest Marker").type = 'NEAREST_MARKER'
+ pie.operator("action.snap", text="Selection to Current Frame").type = 'CFRA'
+ pie.operator("action.snap", text="Selection to Nearest Frame").type = 'NEAREST_FRAME'
+ pie.operator("action.snap", text="Selection to Nearest Second").type = 'NEAREST_SECOND'
+ pie.operator("action.snap", text="Selection to Nearest Marker").type = 'NEAREST_MARKER'
class LayersDopeSheetPanel:
@@ -746,7 +744,6 @@ class DOPESHEET_PT_gpencil_layer_display(LayersDopeSheetPanel, GreasePencilLayer
classes = (
DOPESHEET_HT_header,
- DOPESHEET_HT_editor_buttons,
DOPESHEET_MT_editor_menus,
DOPESHEET_MT_view,
DOPESHEET_MT_select,
diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py
index 2c52d9cd337..a9bb2e79762 100644
--- a/release/scripts/startup/bl_ui/space_filebrowser.py
+++ b/release/scripts/startup/bl_ui/space_filebrowser.py
@@ -20,7 +20,6 @@
from bpy.types import Header, Panel, Menu, UIList
-
class FILEBROWSER_HT_header(Header):
bl_space_type = 'FILE_BROWSER'
@@ -44,7 +43,7 @@ class FILEBROWSER_HT_header(Header):
class FILEBROWSER_PT_display(Panel):
bl_space_type = 'FILE_BROWSER'
bl_region_type = 'HEADER'
- bl_label = "Display Settings" # Shows as tooltip in popover
+ bl_label = "Display Settings" # Shows as tooltip in popover
bl_ui_units_x = 10
@classmethod
@@ -77,7 +76,7 @@ class FILEBROWSER_PT_display(Panel):
class FILEBROWSER_PT_filter(Panel):
bl_space_type = 'FILE_BROWSER'
bl_region_type = 'HEADER'
- bl_label = "Filter Settings" # Shows as tooltip in popover
+ bl_label = "Filter Settings" # Shows as tooltip in popover
bl_ui_units_x = 8
@classmethod
diff --git a/release/scripts/startup/bl_ui/space_graph.py b/release/scripts/startup/bl_ui/space_graph.py
index 078b1c9ff38..3fee0ae9d47 100644
--- a/release/scripts/startup/bl_ui/space_graph.py
+++ b/release/scripts/startup/bl_ui/space_graph.py
@@ -262,8 +262,7 @@ class GRAPH_MT_key(Menu):
layout = self.layout
layout.menu("GRAPH_MT_key_transform", text="Transform")
-
- layout.operator_menu_enum("graph.snap", "type", text="Snap")
+ layout.menu("GRAPH_MT_key_snap", text="Snap")
layout.operator_menu_enum("graph.mirror", "type", text="Mirror")
layout.separator()
@@ -302,6 +301,7 @@ class GRAPH_MT_key(Menu):
layout.operator("graph.smooth")
layout.operator("graph.sample")
layout.operator("graph.bake")
+ layout.operator("graph.unbake")
layout.separator()
layout.operator("graph.euler_filter", text="Discontinuity (Euler) Filter")
@@ -319,6 +319,23 @@ class GRAPH_MT_key_transform(Menu):
layout.operator("transform.resize", text="Scale")
+class GRAPH_MT_key_snap(Menu):
+ bl_label = "Snap"
+
+ def draw(self, _context):
+ layout = self.layout
+
+ layout.operator("graph.snap", text="Selection to Current Frame").type = 'CFRA'
+ layout.operator("graph.snap", text="Selection to Cursor Value").type = 'VALUE'
+ layout.operator("graph.snap", text="Selection to Nearest Frame").type = 'NEAREST_FRAME'
+ layout.operator("graph.snap", text="Selection to Nearest Second").type = 'NEAREST_SECOND'
+ layout.operator("graph.snap", text="Selection to Nearest Marker").type = 'NEAREST_MARKER'
+ layout.operator("graph.snap", text="Flatten Handles").type = 'HORIZONTAL'
+ layout.separator()
+ layout.operator("graph.frame_jump", text="Cursor to Selection")
+ layout.operator("graph.snap_cursor_value", text="Cursor Value to Selection")
+
+
class GRAPH_MT_delete(Menu):
bl_label = "Delete"
@@ -383,12 +400,14 @@ class GRAPH_MT_snap_pie(Menu):
layout = self.layout
pie = layout.menu_pie()
- pie.operator("graph.snap", text="Current Frame").type = 'CFRA'
- pie.operator("graph.snap", text="Cursor Value").type = 'VALUE'
- pie.operator("graph.snap", text="Nearest Frame").type = 'NEAREST_FRAME'
- pie.operator("graph.snap", text="Nearest Second").type = 'NEAREST_SECOND'
- pie.operator("graph.snap", text="Nearest Marker").type = 'NEAREST_MARKER'
+ pie.operator("graph.snap", text="Selection to Current Frame").type = 'CFRA'
+ pie.operator("graph.snap", text="Selection to Cursor Value").type = 'VALUE'
+ pie.operator("graph.snap", text="Selection to Nearest Frame").type = 'NEAREST_FRAME'
+ pie.operator("graph.snap", text="Selection to Nearest Second").type = 'NEAREST_SECOND'
+ pie.operator("graph.snap", text="Selection to Nearest Marker").type = 'NEAREST_MARKER'
pie.operator("graph.snap", text="Flatten Handles").type = 'HORIZONTAL'
+ pie.operator("graph.frame_jump", text="Cursor to Selection")
+ pie.operator("graph.snap_cursor_value", text="Cursor Value to Selection")
class GRAPH_MT_channel_context_menu(Menu):
@@ -441,6 +460,7 @@ classes = (
GRAPH_MT_channel,
GRAPH_MT_key,
GRAPH_MT_key_transform,
+ GRAPH_MT_key_snap,
GRAPH_MT_delete,
GRAPH_MT_context_menu,
GRAPH_MT_channel_context_menu,
diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py
index 0fde128a906..f4e88b70281 100644
--- a/release/scripts/startup/bl_ui/space_image.py
+++ b/release/scripts/startup/bl_ui/space_image.py
@@ -742,6 +742,7 @@ class IMAGE_HT_header(Header):
layout = self.layout
sima = context.space_data
+ overlay = sima.overlay
ima = sima.image
iuser = sima.image_user
tool_settings = context.tool_settings
@@ -787,6 +788,13 @@ class IMAGE_HT_header(Header):
layout.separator_spacer()
+ # Overlay toggle & popover
+ row = layout.row(align=True)
+ row.prop(overlay, "show_overlays", icon='OVERLAY', text="")
+ sub = row.row(align=True)
+ sub.active = overlay.show_overlays
+ sub.popover(panel="IMAGE_PT_overlay", text="")
+
if show_uvedit:
uvedit = sima.uv_editor
@@ -986,74 +994,14 @@ class IMAGE_PT_view_display(Panel):
if ima:
col.prop(ima, "display_aspect", text="Aspect Ratio")
- col.prop(sima, "show_repeat", text="Repeat Image")
+ row = col.row()
+ row.active = ima.source != 'TILED'
+ row.prop(sima, "show_repeat", text="Repeat Image")
if show_uvedit:
col.prop(uvedit, "show_pixel_coords", text="Pixel Coordinates")
-class IMAGE_PT_view_display_uv_edit_overlays(Panel):
- bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'UI'
- bl_label = "Overlays"
- bl_parent_id = 'IMAGE_PT_view_display'
- bl_category = "View"
- bl_options = {'DEFAULT_CLOSED'}
-
- @classmethod
- def poll(cls, context):
- sima = context.space_data
- return (sima and (sima.show_uvedit))
-
- def draw(self, context):
- layout = self.layout
- layout.use_property_split = True
- layout.use_property_decorate = False
-
- sima = context.space_data
- uvedit = sima.uv_editor
-
- col = layout.column()
-
- col.prop(uvedit, "edge_display_type", text="Display As")
- col.prop(uvedit, "show_faces", text="Faces")
-
- col = layout.column()
- if context.preferences.experimental.use_image_editor_legacy_drawing:
- col.prop(uvedit, "show_smooth_edges", text="Smooth")
- col.prop(uvedit, "show_modified_edges", text="Modified")
- col.prop(uvedit, "uv_opacity")
-
-
-class IMAGE_PT_view_display_uv_edit_overlays_stretch(Panel):
- bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'UI'
- bl_label = "Stretching"
- bl_parent_id = 'IMAGE_PT_view_display_uv_edit_overlays'
- bl_category = "View"
- bl_options = {'DEFAULT_CLOSED'}
-
- @classmethod
- def poll(cls, context):
- sima = context.space_data
- return (sima and (sima.show_uvedit))
-
- def draw_header(self, context):
- sima = context.space_data
- uvedit = sima.uv_editor
- self.layout.prop(uvedit, "show_stretch", text="")
-
- def draw(self, context):
- layout = self.layout
- layout.use_property_split = True
-
- sima = context.space_data
- uvedit = sima.uv_editor
-
- layout.active = uvedit.show_stretch
- layout.prop(uvedit, "display_stretch_type", text="Type")
-
-
class IMAGE_UL_render_slots(UIList):
def draw_item(self, _context, layout, _data, item, _icon, _active_data, _active_propname, _index):
slot = item
@@ -1478,10 +1426,11 @@ class IMAGE_PT_uv_cursor(Panel):
sima = context.space_data
- col = layout.column()
+ layout.use_property_split = True
+ layout.use_property_decorate = False
col = layout.column()
- col.prop(sima, "cursor_location", text="Cursor Location")
+ col.prop(sima, "cursor_location", text="Location")
class IMAGE_PT_udim_grid(Panel):
@@ -1502,10 +1451,124 @@ class IMAGE_PT_udim_grid(Panel):
sima = context.space_data
uvedit = sima.uv_editor
+ layout.use_property_split = True
+ layout.use_property_decorate = False
+
col = layout.column()
col.prop(uvedit, "tile_grid_shape", text="Grid Shape")
+class IMAGE_PT_overlay(Panel):
+ bl_space_type = 'IMAGE_EDITOR'
+ bl_region_type = 'HEADER'
+ bl_label = "Overlays"
+ bl_ui_units_x = 13
+
+ def draw(self, context):
+ pass
+
+
+class IMAGE_PT_overlay_uv_edit(Panel):
+ bl_space_type = 'IMAGE_EDITOR'
+ bl_region_type = 'HEADER'
+ bl_label = "UV Editing"
+ bl_parent_id = 'IMAGE_PT_overlay'
+
+ @classmethod
+ def poll(cls, context):
+ sima = context.space_data
+ return (sima and (sima.show_uvedit))
+
+ def draw(self, context):
+ layout = self.layout
+
+ sima = context.space_data
+ uvedit = sima.uv_editor
+ overlay = sima.overlay
+
+ layout.active = overlay.show_overlays
+
+ # UV Stretching
+ row = layout.row()
+ row.prop(uvedit, "show_stretch")
+ subrow = row.row(align=True)
+ subrow.active = uvedit.show_stretch
+ subrow.prop(uvedit, "display_stretch_type", text="")
+
+
+
+class IMAGE_PT_overlay_uv_edit_geometry(Panel):
+ bl_space_type = 'IMAGE_EDITOR'
+ bl_region_type = 'HEADER'
+ bl_label = "Geometry"
+ bl_parent_id = 'IMAGE_PT_overlay'
+
+ @classmethod
+ def poll(cls, context):
+ sima = context.space_data
+ return (sima and (sima.show_uvedit))
+
+ def draw(self, context):
+ layout = self.layout
+
+ sima = context.space_data
+ uvedit = sima.uv_editor
+ overlay = sima.overlay
+
+ layout.active = overlay.show_overlays
+
+ # Edges
+ col = layout.column()
+ col.prop(uvedit, "uv_opacity")
+ col.prop(uvedit, "edge_display_type", text="")
+ col.prop(uvedit, "show_modified_edges", text="Modified Edges")
+
+ # Faces
+ row = col.row()
+ row.active = not uvedit.show_stretch
+ row.prop(uvedit, "show_faces", text="Faces")
+
+
+
+class IMAGE_PT_overlay_texture_paint(Panel):
+ bl_space_type = 'IMAGE_EDITOR'
+ bl_region_type = 'HEADER'
+ bl_label = "Geometry"
+ bl_parent_id = 'IMAGE_PT_overlay'
+
+ @classmethod
+ def poll(cls, context):
+ sima = context.space_data
+ return (sima and (sima.show_paint))
+
+ def draw(self, context):
+ layout = self.layout
+
+ sima = context.space_data
+ uvedit = sima.uv_editor
+ overlay = sima.overlay
+
+ layout.active = overlay.show_overlays
+ layout.prop(uvedit, "show_texpaint")
+
+
+class IMAGE_PT_overlay_image(Panel):
+ bl_space_type = 'IMAGE_EDITOR'
+ bl_region_type = 'HEADER'
+ bl_label = "Image"
+ bl_parent_id = 'IMAGE_PT_overlay'
+
+ def draw(self, context):
+ layout = self.layout
+
+ sima = context.space_data
+ uvedit = sima.uv_editor
+ overlay = sima.overlay
+
+ layout.active = overlay.show_overlays
+ layout.prop(uvedit, "show_metadata")
+
+
# Grease Pencil properties
class IMAGE_PT_annotation(AnnotationDataPanel, Panel):
bl_space_type = 'IMAGE_EDITOR'
@@ -1554,8 +1617,6 @@ classes = (
IMAGE_UL_udim_tiles,
IMAGE_PT_udim_tiles,
IMAGE_PT_view_display,
- IMAGE_PT_view_display_uv_edit_overlays,
- IMAGE_PT_view_display_uv_edit_overlays_stretch,
IMAGE_PT_paint_select,
IMAGE_PT_paint_settings,
IMAGE_PT_paint_color,
@@ -1581,6 +1642,11 @@ classes = (
IMAGE_PT_uv_cursor,
IMAGE_PT_annotation,
IMAGE_PT_udim_grid,
+ IMAGE_PT_overlay,
+ IMAGE_PT_overlay_uv_edit,
+ IMAGE_PT_overlay_uv_edit_geometry,
+ IMAGE_PT_overlay_texture_paint,
+ IMAGE_PT_overlay_image,
)
diff --git a/release/scripts/startup/bl_ui/space_nla.py b/release/scripts/startup/bl_ui/space_nla.py
index 4ecc4e7fdd9..d472352084c 100644
--- a/release/scripts/startup/bl_ui/space_nla.py
+++ b/release/scripts/startup/bl_ui/space_nla.py
@@ -241,10 +241,10 @@ class NLA_MT_snap_pie(Menu):
layout = self.layout
pie = layout.menu_pie()
- pie.operator("nla.snap", text="Current Frame").type = 'CFRA'
- pie.operator("nla.snap", text="Nearest Frame").type = 'NEAREST_FRAME'
- pie.operator("nla.snap", text="Nearest Second").type = 'NEAREST_SECOND'
- pie.operator("nla.snap", text="Nearest Marker").type = 'NEAREST_MARKER'
+ pie.operator("nla.snap", text="Selection to Current Frame").type = 'CFRA'
+ pie.operator("nla.snap", text="Selection to Nearest Frame").type = 'NEAREST_FRAME'
+ pie.operator("nla.snap", text="Selection to Nearest Second").type = 'NEAREST_SECOND'
+ pie.operator("nla.snap", text="Selection to Nearest Marker").type = 'NEAREST_MARKER'
class NLA_MT_context_menu(Menu):
diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py
index 93be870ce73..c0c38c02c63 100644
--- a/release/scripts/startup/bl_ui/space_node.py
+++ b/release/scripts/startup/bl_ui/space_node.py
@@ -78,7 +78,7 @@ class NODE_HT_header(Header):
types_that_support_material = {'MESH', 'CURVE', 'SURFACE', 'FONT', 'META',
'GPENCIL', 'VOLUME', 'HAIR', 'POINTCLOUD'}
- # disable material slot buttons when pinned, cannot find correct slot within id_from (#36589)
+ # disable material slot buttons when pinned, cannot find correct slot within id_from (T36589)
# disable also when the selected object does not support materials
has_material_slots = not snode.pin and ob_type in types_that_support_material
@@ -245,8 +245,10 @@ class NODE_MT_view(Menu):
layout.separator()
- layout.operator("view2d.zoom_in")
- layout.operator("view2d.zoom_out")
+ sub = layout.column()
+ sub.operator_context = 'EXEC_REGION_WIN'
+ sub.operator("view2d.zoom_in")
+ sub.operator("view2d.zoom_out")
layout.separator()
@@ -535,7 +537,7 @@ class NODE_PT_active_node_properties(Panel):
# XXX this could be filtered further to exclude socket types
# which don't have meaningful input values (e.g. cycles shader)
- value_inputs = [socket for socket in node.inputs if socket.enabled and not socket.is_linked]
+ value_inputs = [socket for socket in node.inputs if self.show_socket_input(socket)]
if value_inputs:
layout.separator()
layout.label(text="Inputs:")
@@ -548,6 +550,9 @@ class NODE_PT_active_node_properties(Panel):
iface_(socket.label if socket.label else socket.name, socket.bl_rna.translation_context),
)
+ def show_socket_input(self, socket):
+ return hasattr(socket, 'draw') and socket.enabled and not socket.is_linked
+
class NODE_PT_texture_mapping(Panel):
bl_space_type = 'NODE_EDITOR'
diff --git a/release/scripts/startup/bl_ui/space_outliner.py b/release/scripts/startup/bl_ui/space_outliner.py
index 4497f37cfd2..c61b6218dda 100644
--- a/release/scripts/startup/bl_ui/space_outliner.py
+++ b/release/scripts/startup/bl_ui/space_outliner.py
@@ -239,6 +239,10 @@ class OUTLINER_MT_collection(Menu):
if space.display_mode == 'VIEW_LAYER':
layout.separator()
layout.menu("OUTLINER_MT_collection_view_layer", icon='RENDERLAYERS')
+ layout.separator()
+
+ row = layout.row(align=True)
+ row.operator_enum("outliner.collection_color_tag_set", "color", icon_only=True)
layout.separator()
diff --git a/release/scripts/startup/bl_ui/space_properties.py b/release/scripts/startup/bl_ui/space_properties.py
index 7d9ca687524..0f64ab63d6b 100644
--- a/release/scripts/startup/bl_ui/space_properties.py
+++ b/release/scripts/startup/bl_ui/space_properties.py
@@ -23,11 +23,29 @@ from bpy.types import Header, Panel
class PROPERTIES_HT_header(Header):
bl_space_type = 'PROPERTIES'
- def draw(self, _context):
+ def draw(self, context):
layout = self.layout
+ view = context.space_data
+ region = context.region
+ ui_scale = context.preferences.system.ui_scale
layout.template_header()
+ layout.separator_spacer()
+
+ # The following is an ugly attempt to make the search button center-align better visually.
+ # A dummy icon is inserted that has to be scaled as the available width changes.
+ content_size_est = 160 * ui_scale
+ layout_scale = min(1, max(0, (region.width / content_size_est) - 1))
+ if layout_scale > 0:
+ row = layout.row()
+ row.scale_x = layout_scale
+ row.label(icon='BLANK1')
+
+ layout.prop(view, "search_filter", icon='VIEWZOOM', text="")
+
+ layout.separator_spacer()
+
class PROPERTIES_PT_navigation_bar(Panel):
bl_space_type = 'PROPERTIES'
@@ -42,7 +60,11 @@ class PROPERTIES_PT_navigation_bar(Panel):
layout.scale_x = 1.4
layout.scale_y = 1.4
- layout.prop_tabs_enum(view, "context", icon_only=True)
+ if view.search_filter:
+ layout.prop_tabs_enum(view, "context", data_highlight=view,
+ property_highlight="tab_search_results", icon_only=True)
+ else:
+ layout.prop_tabs_enum(view, "context", icon_only=True)
classes = (
diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py
index 1164ff82e3c..3f92fce81f6 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -262,7 +262,7 @@ class SEQUENCER_MT_view(Menu):
if st.view_type == 'PREVIEW':
# Specifying the REGION_PREVIEW context is needed in preview-only
# mode, else the lookup for the shortcut will fail in
- # wm_keymap_item_find_props() (see #32595).
+ # wm_keymap_item_find_props() (see T32595).
layout.operator_context = 'INVOKE_REGION_PREVIEW'
layout.prop(st, "show_region_ui")
layout.prop(st, "show_region_toolbar")
@@ -949,54 +949,28 @@ class SEQUENCER_PT_strip(SequencerButtonsPanel, Panel):
row.prop(strip, "mute", toggle=True, icon_only=True, emboss=False)
-class SEQUENCER_PT_adjust_transform_offset(SequencerButtonsPanel, Panel):
- bl_label = "Offset"
- bl_parent_id = "SEQUENCER_PT_adjust_transform"
+class SEQUENCER_PT_adjust_crop(SequencerButtonsPanel, Panel):
+ bl_label = "Crop"
bl_options = {'DEFAULT_CLOSED'}
bl_category = "Strip"
@classmethod
def poll(cls, context):
- strip = act_strip(context)
- return strip.type != 'SOUND'
-
- def draw_header(self, context):
- strip = act_strip(context)
- self.layout.prop(strip, "use_translation", text="")
+ if not cls.has_sequencer(context):
+ return False
- def draw(self, context):
strip = act_strip(context)
- layout = self.layout
- layout.use_property_split = True
-
- layout.active = strip.use_translation and (not strip.mute)
-
- col = layout.column(align=True)
- col.prop(strip.transform, "offset_x", text="Position X")
- col.prop(strip.transform, "offset_y", text="Y")
-
-
-class SEQUENCER_PT_adjust_transform_crop(SequencerButtonsPanel, Panel):
- bl_label = "Crop"
- bl_parent_id = "SEQUENCER_PT_adjust_transform"
- bl_options = {'DEFAULT_CLOSED'}
- bl_category = "Strip"
+ if not strip:
+ return False
- @classmethod
- def poll(cls, context):
strip = act_strip(context)
return strip.type != 'SOUND'
- def draw_header(self, context):
- strip = act_strip(context)
- self.layout.prop(strip, "use_crop", text="")
-
def draw(self, context):
strip = act_strip(context)
layout = self.layout
layout.use_property_split = True
-
- layout.active = strip.use_crop and (not strip.mute)
+ layout.active = not strip.mute
col = layout.column(align=True)
col.prop(strip.crop, "min_x")
@@ -1071,7 +1045,7 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
flow.prop(strip, "use_only_boost")
elif strip_type == 'SPEED':
- layout.prop(strip, "use_default_fade", text="Stretch to input strip length")
+ layout.prop(strip, "use_default_fade", text="Stretch to Input Strip Length")
if not strip.use_default_fade:
layout.prop(strip, "use_as_speed")
if strip.use_as_speed:
@@ -1113,7 +1087,7 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
# The multicam strip needs at least 2 strips to be useful
if strip_channel > 2:
BT_ROW = 4
- col.label(text=" Cut to")
+ col.label(text="Cut To")
row = col.row()
for i in range(1, strip_channel):
@@ -1150,10 +1124,10 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
col = layout.column(align=True)
if strip_type == 'SPEED':
col.prop(strip, "multiply_speed")
- col.prop(strip, "frame_interpolation_mode")
+ col.prop(strip, "use_frame_interpolate")
elif strip_type in {'CROSS', 'GAMMA_CROSS', 'WIPE', 'ALPHA_OVER', 'ALPHA_UNDER', 'OVER_DROP'}:
- col.prop(strip, "use_default_fade", text="Default fade")
+ col.prop(strip, "use_default_fade", text="Default Fade")
if not strip.use_default_fade:
col.prop(strip, "effect_fader", text="Effect Fader")
elif strip_type == 'GAUSSIAN_BLUR':
@@ -1214,6 +1188,21 @@ class SEQUENCER_PT_effect_text_style(SequencerButtonsPanel, Panel):
subsub.prop(strip, "shadow_color", text="")
row.prop_decorator(strip, "shadow_color")
+ row = layout.row(align=True, heading="Box")
+ row.use_property_decorate = False
+ sub = row.row(align=True)
+ sub.prop(strip, "use_box", text="")
+ subsub = sub.row(align=True)
+ subsub.active = strip.use_box and (not strip.mute)
+ subsub.prop(strip, "box_color", text="")
+ row.prop_decorator(strip, "box_color")
+
+ row = layout.row(align=True, heading="Box Margin")
+ row.use_property_decorate = False
+ sub = row.row(align=True)
+ sub.prop(strip, "box_margin")
+ sub.active = strip.use_box and (not strip.mute)
+
class SEQUENCER_PT_source(SequencerButtonsPanel, Panel):
bl_label = "Source"
@@ -1590,21 +1579,19 @@ class SEQUENCER_PT_time(SequencerButtonsPanel, Panel):
split.label(text="%d-%d (%d)" % (sta, end, end - sta + 1), translate=False)
-class SEQUENCER_PT_adjust(SequencerButtonsPanel, Panel):
- bl_label = "Adjust"
- bl_category = "Strip"
-
- def draw(self, context):
- pass
-
-
class SEQUENCER_PT_adjust_sound(SequencerButtonsPanel, Panel):
bl_label = "Sound"
- bl_parent_id = "SEQUENCER_PT_adjust"
bl_category = "Strip"
@classmethod
def poll(cls, context):
+ if not cls.has_sequencer(context):
+ return False
+
+ strip = act_strip(context)
+ if not strip:
+ return False
+
strip = act_strip(context)
return strip.type == 'SOUND'
@@ -1636,11 +1623,17 @@ class SEQUENCER_PT_adjust_sound(SequencerButtonsPanel, Panel):
class SEQUENCER_PT_adjust_comp(SequencerButtonsPanel, Panel):
bl_label = "Compositing"
- bl_parent_id = "SEQUENCER_PT_adjust"
bl_category = "Strip"
@classmethod
def poll(cls, context):
+ if not cls.has_sequencer(context):
+ return False
+
+ strip = act_strip(context)
+ if not strip:
+ return False
+
strip = act_strip(context)
return strip.type != 'SOUND'
@@ -1659,8 +1652,8 @@ class SEQUENCER_PT_adjust_comp(SequencerButtonsPanel, Panel):
class SEQUENCER_PT_adjust_transform(SequencerButtonsPanel, Panel):
bl_label = "Transform"
- bl_parent_id = "SEQUENCER_PT_adjust"
bl_category = "Strip"
+ bl_options = {'DEFAULT_CLOSED'}
@classmethod
def poll(cls, context):
@@ -1671,23 +1664,26 @@ class SEQUENCER_PT_adjust_transform(SequencerButtonsPanel, Panel):
if not strip:
return False
- return strip.type in {
- 'MOVIE', 'IMAGE', 'SCENE', 'MOVIECLIP', 'MASK',
- 'META', 'ADD', 'SUBTRACT', 'ALPHA_OVER', 'TEXT',
- 'ALPHA_UNDER', 'CROSS', 'GAMMA_CROSS', 'MULTIPLY',
- 'OVER_DROP', 'WIPE', 'GLOW', 'TRANSFORM', 'COLOR',
- 'MULTICAM', 'SPEED', 'ADJUSTMENT', 'COLORMIX'
- }
+ strip = act_strip(context)
+ return strip.type != 'SOUND'
def draw(self, context):
- layout = self.layout
strip = act_strip(context)
-
+ layout = self.layout
layout.use_property_split = True
- layout.use_property_decorate = False
-
layout.active = not strip.mute
+ col = layout.column(align=True)
+ col.prop(strip.transform, "offset_x", text="Position X")
+ col.prop(strip.transform, "offset_y", text="Y")
+
+ col = layout.column(align=True)
+ col.prop(strip.transform, "scale_x", text="Scale X")
+ col.prop(strip.transform, "scale_y", text="Y")
+
+ col = layout.column(align=True)
+ col.prop(strip.transform, "rotation", text="Rotation")
+
row = layout.row(heading="Mirror")
sub = row.row(align=True)
sub.prop(strip, "use_flip_x", text="X", toggle=True)
@@ -1696,7 +1692,6 @@ class SEQUENCER_PT_adjust_transform(SequencerButtonsPanel, Panel):
class SEQUENCER_PT_adjust_video(SequencerButtonsPanel, Panel):
bl_label = "Video"
- bl_parent_id = "SEQUENCER_PT_adjust"
bl_options = {'DEFAULT_CLOSED'}
bl_category = "Strip"
@@ -1745,7 +1740,6 @@ class SEQUENCER_PT_adjust_video(SequencerButtonsPanel, Panel):
class SEQUENCER_PT_adjust_color(SequencerButtonsPanel, Panel):
bl_label = "Color"
- bl_parent_id = "SEQUENCER_PT_adjust"
bl_options = {'DEFAULT_CLOSED'}
bl_category = "Strip"
@@ -2234,11 +2228,9 @@ classes = (
SEQUENCER_PT_effect_text_style,
SEQUENCER_PT_effect_text_layout,
- SEQUENCER_PT_adjust,
SEQUENCER_PT_adjust_comp,
SEQUENCER_PT_adjust_transform,
- SEQUENCER_PT_adjust_transform_offset,
- SEQUENCER_PT_adjust_transform_crop,
+ SEQUENCER_PT_adjust_crop,
SEQUENCER_PT_adjust_video,
SEQUENCER_PT_adjust_color,
SEQUENCER_PT_adjust_sound,
diff --git a/release/scripts/startup/bl_ui/space_statusbar.py b/release/scripts/startup/bl_ui/space_statusbar.py
index cbf72a7bc59..616a3ab45fd 100644
--- a/release/scripts/startup/bl_ui/space_statusbar.py
+++ b/release/scripts/startup/bl_ui/space_statusbar.py
@@ -31,7 +31,12 @@ class STATUSBAR_HT_header(Header):
layout.separator_spacer()
- # Nothing in the center.
+ # Messages
+ layout.template_reports_banner()
+
+ # Progress Bar
+ layout.template_running_jobs()
+
layout.separator_spacer()
row = layout.row()
@@ -40,12 +45,6 @@ class STATUSBAR_HT_header(Header):
# Stats & Info
row.label(text=context.screen.statusbar_info(), translate=False)
- # Messages
- row.template_reports_banner()
-
- # Progress Bar
- row.template_running_jobs()
-
classes = (
STATUSBAR_HT_header,
diff --git a/release/scripts/startup/bl_ui/space_text.py b/release/scripts/startup/bl_ui/space_text.py
index 4f518d8e2d4..c937882bd6e 100644
--- a/release/scripts/startup/bl_ui/space_text.py
+++ b/release/scripts/startup/bl_ui/space_text.py
@@ -35,12 +35,12 @@ class TEXT_HT_header(Header):
TEXT_MT_editor_menus.draw_collapsible(context, layout)
+ layout.separator_spacer()
+
if text and text.is_modified:
row = layout.row(align=True)
row.alert = True
- row.operator("text.resolve_conflict", text="", icon='HELP')
-
- layout.separator_spacer()
+ row.operator("text.resolve_conflict", text="", icon='QUESTION')
row = layout.row(align=True)
row.template_ID(st, "text", new="text.new",
@@ -177,7 +177,7 @@ class TEXT_PT_find(Panel):
row = col.row(align=True)
row.operator("text.replace")
- row.operator("text.replace", text = "Replace all").all = True
+ row.operator("text.replace", text="Replace All").all = True
layout.separator()
@@ -362,7 +362,7 @@ class TEXT_MT_format(Menu):
class TEXT_MT_edit_to3d(Menu):
- bl_label = "Text To 3D Object"
+ bl_label = "Text to 3D Object"
def draw(self, _context):
layout = self.layout
diff --git a/release/scripts/startup/bl_ui/space_time.py b/release/scripts/startup/bl_ui/space_time.py
index 68b5f8acd38..16b02db9377 100644
--- a/release/scripts/startup/bl_ui/space_time.py
+++ b/release/scripts/startup/bl_ui/space_time.py
@@ -18,17 +18,11 @@
# <pep8 compliant>
import bpy
-from bpy.types import Header, Menu, Panel
+from bpy.types import Menu, Panel
# Header buttons for timeline header (play, etc.)
-class TIME_HT_editor_buttons(Header):
- bl_idname = "TIME_HT_editor_buttons"
- bl_space_type = 'DOPESHEET_EDITOR'
- bl_label = ""
-
- def draw(self, context):
- pass
+class TIME_HT_editor_buttons:
@staticmethod
def draw_header(context, layout):
@@ -38,7 +32,14 @@ class TIME_HT_editor_buttons(Header):
layout.separator_spacer()
- layout.prop(tool_settings, "use_keyframe_insert_auto", text="", toggle=True)
+ row = layout.row(align=True)
+ row.prop(tool_settings, "use_keyframe_insert_auto", text="", toggle=True)
+ sub = row.row(align=True)
+ sub.active = tool_settings.use_keyframe_insert_auto
+ sub.popover(
+ panel="TIME_PT_auto_keyframing",
+ text="",
+ )
row = layout.row(align=True)
row.operator("screen.frame_jump", text="", icon='REW').end = False
@@ -240,8 +241,8 @@ class TIME_PT_playback(TimelinePanelButtons, Panel):
screen = context.screen
scene = context.scene
- col = layout.column()
- col.prop(scene, "sync_mode", text="Audio")
+ layout.prop(scene, "sync_mode", text="Sync")
+ col = layout.column(heading="Audio")
col.prop(scene, "use_audio_scrub", text="Scrubbing")
col.prop(scene, "use_audio", text="Mute")
@@ -284,40 +285,57 @@ class TIME_PT_keyframing_settings(TimelinePanelButtons, Panel):
scene = context.scene
tool_settings = context.tool_settings
- prefs = context.preferences
col = layout.column(align=True)
- col.label(text="Active Keying Set:")
+ col.label(text="Active Keying Set")
row = col.row(align=True)
row.prop_search(scene.keying_sets_all, "active", scene, "keying_sets_all", text="")
row.operator("anim.keyframe_insert", text="", icon='KEY_HLT')
row.operator("anim.keyframe_delete", text="", icon='KEY_DEHLT')
col = layout.column(align=True)
- col.label(text="New Keyframe Type:")
+ col.label(text="New Keyframe Type")
col.prop(tool_settings, "keyframe_type", text="")
+class TIME_PT_auto_keyframing(TimelinePanelButtons, Panel):
+ bl_label = "Auto Keyframing"
+ bl_options = {'HIDE_HEADER'}
+ bl_region_type = 'HEADER'
+ bl_ui_units_x = 9
+
+ @classmethod
+ def poll(cls, context):
+ # Only for timeline editor.
+ return cls.has_timeline(context)
+
+ def draw(self, context):
+ layout = self.layout
+
+ tool_settings = context.tool_settings
+ prefs = context.preferences
+
+ layout.active = tool_settings.use_keyframe_insert_auto
+
+ layout.prop(tool_settings, "auto_keying_mode", expand=True)
+
col = layout.column(align=True)
- col.label(text="Auto Keyframing:")
- row = col.row()
- row.prop(tool_settings, "auto_keying_mode", text="")
- row.prop(tool_settings, "use_keyframe_insert_keyingset", text="")
+ col.prop(tool_settings, "use_keyframe_insert_keyingset", text="Only Active Keying Set", toggle=False)
if not prefs.edit.use_keyframe_insert_available:
col.prop(tool_settings, "use_record_with_nla", text="Layered Recording")
- layout.prop(tool_settings, "use_keyframe_cycle_aware")
+ col.prop(tool_settings, "use_keyframe_cycle_aware")
###################################
classes = (
- TIME_HT_editor_buttons,
TIME_MT_editor_menus,
TIME_MT_marker,
TIME_MT_view,
TIME_MT_cache,
TIME_PT_playback,
TIME_PT_keyframing_settings,
+ TIME_PT_auto_keyframing,
)
if __name__ == "__main__": # only for live edit.
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_common.py b/release/scripts/startup/bl_ui/space_toolsystem_common.py
index 50316f50474..748b5733433 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_common.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_common.py
@@ -288,7 +288,6 @@ class ToolSelectPanelHelper:
else:
yield item
-
@classmethod
def _tool_get_active(cls, context, space_type, mode, with_icon=False):
"""
@@ -326,7 +325,7 @@ class ToolSelectPanelHelper:
if item is not None:
if type(item) is tuple:
if item[0].idname == idname:
- index = cls._tool_group_active.get(item[0].idname, 0)
+ index = cls._tool_group_active_get_from_item(item)
return (item[index], index)
else:
if item.idname == idname:
@@ -342,7 +341,7 @@ class ToolSelectPanelHelper:
if item is not None:
if type(item) is tuple:
if item[0].idname == idname:
- index = cls._tool_group_active.get(item[0].idname, 0)
+ index = cls._tool_group_active_get_from_item(item)
return (item[index], index, item)
else:
if item.idname == idname:
@@ -395,7 +394,7 @@ class ToolSelectPanelHelper:
if item is not None:
if i == tool_index:
if type(item) is tuple:
- index = cls._tool_group_active.get(item[0].idname, 0)
+ index = cls._tool_group_active_get_from_item(item)
item = item[index]
else:
index = -1
@@ -404,6 +403,19 @@ class ToolSelectPanelHelper:
return None, -1
@classmethod
+ def _tool_group_active_get_from_item(cls, item):
+ index = cls._tool_group_active.get(item[0].idname, 0)
+ # Can happen in the case a group is dynamic.
+ #
+ # NOTE(Campbell): that in this case it's possible the order could change too,
+ # So if we want to support this properly we will need to switch away from using
+ # an index and instead use an ID.
+ # Currently this is such a rare case occurrence that a range check is OK for now.
+ if index >= len(item):
+ index = 0
+ return index
+
+ @classmethod
def _tool_group_active_set_by_id(cls, context, idname_group, idname):
item_group = cls._tool_get_group_by_id(context, idname_group, coerce=True)
if item_group:
@@ -664,7 +676,7 @@ class ToolSelectPanelHelper:
# not ideal, write this every time :S
cls._tool_group_active[item[0].idname] = index
else:
- index = cls._tool_group_active.get(item[0].idname, 0)
+ index = cls._tool_group_active_get_from_item(item)
item = item[index]
use_menu = True
@@ -821,7 +833,8 @@ class ToolSelectPanelHelper:
if is_active_tool:
index_current = -1
else:
- index_current = cls._tool_group_active.get(item_group[0].idname, 0)
+ index_current = cls._tool_group_active_get_from_item(item_group)
+
for i, sub_item in enumerate(item_group):
is_active = (i == index_current)
@@ -871,7 +884,7 @@ class ToolSelectPanelHelper:
if is_active_tool:
index_current = -1
else:
- index_current = cls._tool_group_active.get(item_group[0].idname, 0)
+ index_current = cls._tool_group_active_get_from_item(item_group)
for i, sub_item in enumerate(item_group):
is_active = (i == index_current)
props = pie.operator(
@@ -1023,7 +1036,7 @@ def activate_by_id_or_cycle(context, space_type, idname, *, offset=1, as_fallbac
id_current = ""
for item_group in cls.tools_from_context(context):
if type(item_group) is tuple:
- index_current = cls._tool_group_active.get(item_group[0].idname, 0)
+ index_current = cls._tool_group_active_get_from_item(item_group)
for sub_item in item_group:
if sub_item.idname == idname:
id_current = item_group[index_current].idname
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index 75dfd60b1d4..9e86ea19432 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -50,7 +50,7 @@ def generate_from_enum_ex(
attr,
cursor='DEFAULT',
tooldef_keywords={},
- exclude_filter = {}
+ exclude_filter={}
):
tool_defs = []
for enum in type.bl_rna.properties[attr].enum_items_static:
@@ -787,7 +787,6 @@ class _defs_edit_mesh:
col.prop(props, "mark_seam", text="Seam")
col.prop(props, "mark_sharp", text="Sharp")
-
col = layout.column()
col.active = edge_bevel
col.prop(props, "miter_outer", text="Miter Outer")
@@ -1206,16 +1205,13 @@ class _defs_sculpt:
if not prefs.experimental.use_sculpt_vertex_colors:
exclude_filter = {'PAINT', 'SMEAR'}
- if not prefs.experimental.use_tools_missing_icons:
- exclude_filter = {'PAINT', 'SMEAR', 'BOUNDARY', 'DISPLACEMENT_ERASER'}
-
return generate_from_enum_ex(
context,
idname_prefix="builtin_brush.",
icon_prefix="brush.sculpt.",
type=bpy.types.Brush,
attr="sculpt_tool",
- exclude_filter = exclude_filter,
+ exclude_filter=exclude_filter,
)
@ToolDef.from_fn
@@ -1259,6 +1255,22 @@ class _defs_sculpt:
)
@ToolDef.from_fn
+ def mask_line():
+ def draw_settings(_context, layout, tool):
+ props = tool.operator_properties("paint.mask_line_gesture")
+ layout.prop(props, "use_front_faces_only", expand=False)
+ layout.prop(props, "use_limit_to_segment", expand=False)
+
+ return dict(
+ idname="builtin.line_mask",
+ label="Line Mask",
+ icon="ops.sculpt.line_mask",
+ widget=None,
+ keymap=(),
+ draw_settings=draw_settings,
+ )
+
+ @ToolDef.from_fn
def face_set_box():
def draw_settings(_context, layout, tool):
props = tool.operator_properties("sculpt.face_set_box_gesture")
@@ -1290,24 +1302,49 @@ class _defs_sculpt:
@ToolDef.from_fn
def trim_box():
+ def draw_settings(_context, layout, tool):
+ props = tool.operator_properties("sculpt.trim_box_gesture")
+ layout.prop(props, "trim_mode", expand=False)
+ layout.prop(props, "use_cursor_depth", expand=False)
return dict(
idname="builtin.box_trim",
label="Box Trim",
icon="ops.sculpt.box_trim",
widget=None,
keymap=(),
+ draw_settings=draw_settings,
)
@ToolDef.from_fn
def trim_lasso():
+ def draw_settings(_context, layout, tool):
+ props = tool.operator_properties("sculpt.trim_lasso_gesture")
+ layout.prop(props, "trim_mode", expand=False)
+ layout.prop(props, "trim_orientation", expand=False)
+ layout.prop(props, "use_cursor_depth", expand=False)
return dict(
idname="builtin.lasso_trim",
label="Lasso Trim",
icon="ops.sculpt.lasso_trim",
widget=None,
keymap=(),
+ draw_settings=draw_settings,
)
+ @ToolDef.from_fn
+ def project_line():
+ def draw_settings(_context, layout, tool):
+ props = tool.operator_properties("sculpt.project_line_gesture")
+ layout.prop(props, "use_limit_to_segment", expand=False)
+
+ return dict(
+ idname="builtin.line_project",
+ label="Line Project",
+ icon="ops.sculpt.line_project",
+ widget=None,
+ keymap=(),
+ draw_settings=draw_settings,
+ )
@ToolDef.from_fn
def mesh_filter():
@@ -1318,7 +1355,6 @@ class _defs_sculpt:
row = layout.row(align=True)
row.prop(props, "deform_axis")
layout.prop(props, "orientation", expand=False)
- layout.prop(props, "use_face_sets")
if props.type == 'SURFACE_SMOOTH':
layout.prop(props, "surface_smooth_shape_preservation", expand=False)
layout.prop(props, "surface_smooth_current_vertex", expand=False)
@@ -1785,6 +1821,11 @@ class _defs_gpencil_paint:
@ToolDef.from_fn
def cutter():
+ def draw_settings(context, layout, tool):
+ props = tool.operator_properties("gpencil.stroke_cutter")
+ row = layout.row()
+ row.use_property_split = False
+ row.prop(props, "flat_caps")
return dict(
idname="builtin.cutter",
label="Cutter",
@@ -1792,6 +1833,7 @@ class _defs_gpencil_paint:
cursor='KNIFE',
widget=None,
keymap=(),
+ draw_settings=draw_settings,
)
@ToolDef.from_fn
@@ -2055,10 +2097,10 @@ class _defs_gpencil_edit:
@ToolDef.from_fn
def transform_fill():
def draw_settings(context, layout, tool):
- props = tool.operator_properties("gpencil.transform_fill")
- row = layout.row()
- row.use_property_split = False
- row.prop(props, "mode", expand=True)
+ props = tool.operator_properties("gpencil.transform_fill")
+ row = layout.row()
+ row.use_property_split = False
+ row.prop(props, "mode", expand=True)
return dict(
idname="builtin.transform_fill",
@@ -2070,6 +2112,7 @@ class _defs_gpencil_edit:
draw_settings=draw_settings,
)
+
class _defs_gpencil_sculpt:
@staticmethod
@@ -2267,6 +2310,7 @@ class _defs_sequencer_select:
widget=None,
keymap="Sequencer Tool: Select",
)
+
@ToolDef.from_fn
def box():
def draw_settings(_context, layout, tool):
@@ -2650,36 +2694,18 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
(
_defs_sculpt.mask_border,
_defs_sculpt.mask_lasso,
+ _defs_sculpt.mask_line,
),
_defs_sculpt.hide_border,
- lambda context: (
- (_defs_sculpt.face_set_box,)
- if context is None or (
- context.preferences.view.show_developer_ui and
- context.preferences.experimental.use_tools_missing_icons)
- else ()
- ),
- lambda context: (
- (_defs_sculpt.face_set_lasso,)
- if context is None or (
- context.preferences.view.show_developer_ui and
- context.preferences.experimental.use_tools_missing_icons)
- else ()
- ),
- lambda context: (
- (_defs_sculpt.trim_box,)
- if context is None or (
- context.preferences.view.show_developer_ui and
- context.preferences.experimental.use_tools_missing_icons)
- else ()
+ (
+ _defs_sculpt.face_set_box,
+ _defs_sculpt.face_set_lasso,
),
- lambda context: (
- (_defs_sculpt.trim_lasso,)
- if context is None or (
- context.preferences.view.show_developer_ui and
- context.preferences.experimental.use_tools_missing_icons)
- else ()
+ (
+ _defs_sculpt.trim_box,
+ _defs_sculpt.trim_lasso,
),
+ _defs_sculpt.project_line,
None,
_defs_sculpt.mesh_filter,
_defs_sculpt.cloth_filter,
@@ -2687,8 +2713,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
(_defs_sculpt.color_filter,)
if context is None or (
context.preferences.view.show_developer_ui and
- context.preferences.experimental.use_sculpt_vertex_colors and
- context.preferences.experimental.use_tools_missing_icons)
+ context.preferences.experimental.use_sculpt_vertex_colors)
else ()
),
None,
@@ -2696,18 +2721,11 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
(_defs_sculpt.mask_by_color,)
if context is None or (
context.preferences.view.show_developer_ui and
- context.preferences.experimental.use_sculpt_vertex_colors and
- context.preferences.experimental.use_tools_missing_icons)
+ context.preferences.experimental.use_sculpt_vertex_colors)
else ()
),
None,
- lambda context: (
- (_defs_sculpt.face_set_edit,)
- if context is None or (
- context.preferences.view.show_developer_ui and
- context.preferences.experimental.use_tools_missing_icons)
- else ()
- ),
+ _defs_sculpt.face_set_edit,
None,
_defs_transform.translate,
_defs_transform.rotate,
@@ -2820,6 +2838,8 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
),
],
}
+
+
class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, Panel):
bl_space_type = 'SEQUENCE_EDITOR'
bl_region_type = 'TOOLS'
diff --git a/release/scripts/startup/bl_ui/space_topbar.py b/release/scripts/startup/bl_ui/space_topbar.py
index 6fc29119cdc..a7e28c38b9e 100644
--- a/release/scripts/startup/bl_ui/space_topbar.py
+++ b/release/scripts/startup/bl_ui/space_topbar.py
@@ -248,7 +248,7 @@ class TOPBAR_MT_file_cleanup(Menu):
layout = self.layout
layout.separator()
- layout.operator("outliner.orphans_purge")
+ layout.operator("outliner.orphans_purge", text="Unused Data-Blocks")
class TOPBAR_MT_file(Menu):
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index faea806c6cb..ce9543d7dc4 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -45,7 +45,8 @@ class USERPREF_HT_header(Header):
# Show '*' to let users know the preferences have been modified.
layout.operator(
"wm.save_userpref",
- text="Save Preferences" + (" *" if prefs.is_dirty else ""),
+ text=iface_("Save Preferences") + (" *" if prefs.is_dirty else ""),
+ translate=False,
)
def draw(self, context):
@@ -270,7 +271,7 @@ class USERPREF_PT_interface_editors(InterfacePanel, CenterAlignMixIn, Panel):
class USERPREF_PT_interface_temporary_windows(InterfacePanel, CenterAlignMixIn, Panel):
- bl_label = "Temporary Windows"
+ bl_label = "Temporary Editors"
bl_parent_id = "USERPREF_PT_interface_editors"
bl_options = {'DEFAULT_CLOSED'}
@@ -279,7 +280,7 @@ class USERPREF_PT_interface_temporary_windows(InterfacePanel, CenterAlignMixIn,
view = prefs.view
col = layout.column()
- col.prop(view, "render_display_type", text="Render in")
+ col.prop(view, "render_display_type", text="Render In")
col.prop(view, "filebrowser_display_type", text="File Browser")
@@ -373,8 +374,8 @@ class USERPREF_PT_edit_objects_new(EditingPanel, CenterAlignMixIn, Panel):
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
- flow.prop(edit, "material_link", text="Link Materials to")
- flow.prop(edit, "object_align", text="Align to")
+ flow.prop(edit, "material_link", text="Link Materials To")
+ flow.prop(edit, "object_align", text="Align To")
flow.prop(edit, "use_enter_edit_mode", text="Enter Edit Mode")
flow.prop(edit, "collection_instance_empty_size", text="Instance Empty Size")
@@ -479,7 +480,7 @@ class USERPREF_PT_edit_misc(EditingPanel, CenterAlignMixIn, Panel):
col = layout.column()
col.prop(edit, "sculpt_paint_overlay_color", text="Sculpt Overlay Color")
- col.prop(edit, "node_margin", text="Node Auto-offset Margin")
+ col.prop(edit, "node_margin", text="Node Auto-Offset Margin")
# -----------------------------------------------------------------------------
@@ -542,6 +543,7 @@ class USERPREF_PT_animation_fcurves(AnimationPanel, CenterAlignMixIn, Panel):
flow.prop(edit, "keyframe_new_interpolation_type", text="Default Interpolation")
flow.prop(edit, "keyframe_new_handle_type", text="Default Handles")
flow.prop(edit, "use_insertkey_xyz_to_rgb", text="XYZ to RGB")
+ flow.prop(edit, "use_anim_channel_group_colors")
# -----------------------------------------------------------------------------
@@ -1020,6 +1022,25 @@ class USERPREF_PT_theme_bone_color_sets(ThemePanel, CenterAlignMixIn, Panel):
flow.prop(ui, "show_colored_constraints")
+class USERPREF_PT_theme_collection_colors(ThemePanel, CenterAlignMixIn, Panel):
+ bl_label = "Collection Colors"
+ bl_options = {'DEFAULT_CLOSED'}
+
+ def draw_header(self, _context):
+ layout = self.layout
+
+ layout.label(icon='OUTLINER_COLLECTION')
+
+ def draw_centered(self, context, layout):
+ theme = context.preferences.themes[0]
+
+ layout.use_property_split = True
+
+ flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
+ for i, ui in enumerate(theme.collection_color, 1):
+ flow.prop(ui, "color", text=iface_("Color %d") % i, translate=False)
+
+
# Base class for dynamically defined theme-space panels.
# This is not registered.
class PreferenceThemeSpacePanel:
@@ -1329,7 +1350,7 @@ class USERPREF_PT_saveload_blend(SaveLoadPanel, CenterAlignMixIn, Panel):
col.prop(view, "use_save_prompt")
col.prop(paths, "use_save_preview_images")
- col = layout.column(heading="Default to")
+ col = layout.column(heading="Default To")
col.prop(paths, "use_relative_paths")
col.prop(paths, "use_file_compression")
col.prop(paths, "use_load_ui")
@@ -1358,7 +1379,7 @@ class USERPREF_PT_saveload_blend_autosave(SaveLoadPanel, CenterAlignMixIn, Panel
col = layout.column()
col.active = paths.use_auto_save_temporary_files
- col.prop(paths, "auto_save_time", text="Timer (mins)")
+ col.prop(paths, "auto_save_time", text="Timer (Minutes)")
class USERPREF_PT_saveload_file_browser(SaveLoadPanel, CenterAlignMixIn, Panel):
@@ -1468,7 +1489,6 @@ class USERPREF_PT_navigation_orbit(NavigationPanel, CenterAlignMixIn, Panel):
bl_label = "Orbit & Pan"
def draw_centered(self, context, layout):
- import sys
prefs = context.preferences
inputs = prefs.inputs
view = prefs.view
@@ -1484,9 +1504,6 @@ class USERPREF_PT_navigation_orbit(NavigationPanel, CenterAlignMixIn, Panel):
col.separator()
- if sys.platform == "darwin":
- col.prop(inputs, "use_trackpad_natural", text="Natural Trackpad Direction")
-
col = layout.column(heading="Auto")
col.prop(inputs, "use_auto_perspective", text="Perspective")
col.prop(inputs, "use_mouse_depth_navigate", text="Depth")
@@ -1528,9 +1545,6 @@ class USERPREF_PT_navigation_fly_walk(NavigationPanel, CenterAlignMixIn, Panel):
layout.row().prop(inputs, "navigation_mode", expand=True)
- flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
- flow.prop(inputs, "use_camera_lock_parent")
-
class USERPREF_PT_navigation_fly_walk_navigation(NavigationPanel, CenterAlignMixIn, Panel):
bl_label = "Walk"
@@ -1653,6 +1667,7 @@ class USERPREF_PT_ndof_settings(Panel):
# -----------------------------------------------------------------------------
# Key-Map Editor Panels
+
class KeymapPanel:
bl_space_type = 'PREFERENCES'
bl_region_type = 'WINDOW'
@@ -1739,6 +1754,7 @@ class USERPREF_PT_addons(AddOnPanel, Panel):
layout = self.layout
+ wm = context.window_manager
prefs = context.preferences
used_ext = {ext.module for ext in prefs.addons}
@@ -1764,16 +1780,16 @@ class USERPREF_PT_addons(AddOnPanel, Panel):
split = layout.split(factor=0.6)
row = split.row()
- row.prop(context.window_manager, "addon_support", expand=True)
+ row.prop(wm, "addon_support", expand=True)
row = split.row(align=True)
row.operator("preferences.addon_install", icon='IMPORT', text="Install...")
row.operator("preferences.addon_refresh", icon='FILE_REFRESH', text="Refresh")
row = layout.row()
- row.prop(context.preferences.view, "show_addons_enabled_only")
- row.prop(context.window_manager, "addon_filter", text="")
- row.prop(context.window_manager, "addon_search", text="", icon='VIEWZOOM')
+ row.prop(prefs.view, "show_addons_enabled_only")
+ row.prop(wm, "addon_filter", text="")
+ row.prop(wm, "addon_search", text="", icon='VIEWZOOM')
col = layout.column()
@@ -1798,10 +1814,10 @@ class USERPREF_PT_addons(AddOnPanel, Panel):
"(see console for details)",
)
- show_enabled_only = context.preferences.view.show_addons_enabled_only
- filter = context.window_manager.addon_filter
- search = context.window_manager.addon_search.lower()
- support = context.window_manager.addon_support
+ show_enabled_only = prefs.view.show_addons_enabled_only
+ filter = wm.addon_filter
+ search = wm.addon_search.lower()
+ support = wm.addon_support
# initialized on demand
user_addon_paths = []
@@ -2139,6 +2155,7 @@ class ExperimentalPanel:
col = split.split()
col.operator("wm.url_open", text=task, icon='URL').url = self.url_prefix + task
+
"""
# Example panel, leave it here so we always have a template to follow even
# after the features are gone from the experimental panel.
@@ -2162,9 +2179,9 @@ class USERPREF_PT_experimental_new_features(ExperimentalPanel, Panel):
def draw(self, context):
self._draw_items(
context, (
- ({"property": "use_new_particle_system"}, "T73324"),
({"property": "use_sculpt_vertex_colors"}, "T71947"),
- ({"property": "use_tools_missing_icons"}, "T80331"),
+ ({"property": "use_switch_object_operator"}, "T80402"),
+ ({"property": "use_sculpt_tools_tilt"}, "T00000"),
),
)
@@ -2176,6 +2193,8 @@ class USERPREF_PT_experimental_prototypes(ExperimentalPanel, Panel):
self._draw_items(
context, (
({"property": "use_new_hair_type"}, "T68981"),
+ ({"property": "use_new_point_cloud_type"}, "T75717"),
+ ({"property": "use_new_geometry_nodes"}, "project/profile/121"),
),
)
@@ -2194,7 +2213,6 @@ class USERPREF_PT_experimental_debugging(ExperimentalPanel, Panel):
context, (
({"property": "use_undo_legacy"}, "T60695"),
({"property": "use_cycles_debug"}, None),
- ({"property": "use_image_editor_legacy_drawing"}, "T67530"),
),
)
@@ -2256,6 +2274,7 @@ classes = (
USERPREF_PT_theme_interface_icons,
USERPREF_PT_theme_text_style,
USERPREF_PT_theme_bone_color_sets,
+ USERPREF_PT_theme_collection_colors,
USERPREF_PT_file_paths_data,
USERPREF_PT_file_paths_render,
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 28b66119fc6..94acab20e66 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -152,47 +152,27 @@ class VIEW3D_HT_tool_header(Header):
sub.scale_x = 0.6
return row, sub
- if mode_string == 'EDIT_MESH':
- _row, sub = row_for_mirror()
- sub.prop(context.object.data, "use_mirror_x", text="X", toggle=True)
- sub.prop(context.object.data, "use_mirror_y", text="Y", toggle=True)
- sub.prop(context.object.data, "use_mirror_z", text="Z", toggle=True)
- tool_settings = context.tool_settings
- layout.prop(tool_settings, "use_mesh_automerge", text="")
- elif mode_string == 'EDIT_ARMATURE':
+ if mode_string == 'EDIT_ARMATURE':
_row, sub = row_for_mirror()
sub.prop(context.object.data, "use_mirror_x", text="X", toggle=True)
elif mode_string == 'POSE':
_row, sub = row_for_mirror()
sub.prop(context.object.pose, "use_mirror_x", text="X", toggle=True)
- elif mode_string == 'PAINT_WEIGHT':
- row, sub = row_for_mirror()
- wpaint = context.tool_settings.weight_paint
- sub.prop(wpaint, "use_symmetry_x", text="X", toggle=True)
- sub.prop(wpaint, "use_symmetry_y", text="Y", toggle=True)
- sub.prop(wpaint, "use_symmetry_z", text="Z", toggle=True)
- row.popover(panel="VIEW3D_PT_tools_weightpaint_symmetry_for_topbar", text="")
- elif mode_string == 'SCULPT':
- row, sub = row_for_mirror()
- sculpt = context.tool_settings.sculpt
- sub.prop(sculpt, "use_symmetry_x", text="X", toggle=True)
- sub.prop(sculpt, "use_symmetry_y", text="Y", toggle=True)
- sub.prop(sculpt, "use_symmetry_z", text="Z", toggle=True)
- row.popover(panel="VIEW3D_PT_sculpt_symmetry_for_topbar", text="")
- elif mode_string == 'PAINT_TEXTURE':
- _row, sub = row_for_mirror()
- ipaint = context.tool_settings.image_paint
- sub.prop(ipaint, "use_symmetry_x", text="X", toggle=True)
- sub.prop(ipaint, "use_symmetry_y", text="Y", toggle=True)
- sub.prop(ipaint, "use_symmetry_z", text="Z", toggle=True)
- # No need for a popover, the panel only has these options.
- elif mode_string == 'PAINT_VERTEX':
+ elif mode_string in {'EDIT_MESH', 'PAINT_WEIGHT', 'SCULPT', 'PAINT_VERTEX'}:
+ # Mesh Modes, Use Mesh Symmetry
row, sub = row_for_mirror()
- vpaint = context.tool_settings.vertex_paint
- sub.prop(vpaint, "use_symmetry_x", text="X", toggle=True)
- sub.prop(vpaint, "use_symmetry_y", text="Y", toggle=True)
- sub.prop(vpaint, "use_symmetry_z", text="Z", toggle=True)
- row.popover(panel="VIEW3D_PT_tools_vertexpaint_symmetry_for_topbar", text="")
+ sub.prop(context.object.data, "use_mirror_x", text="X", toggle=True)
+ sub.prop(context.object.data, "use_mirror_y", text="Y", toggle=True)
+ sub.prop(context.object.data, "use_mirror_z", text="Z", toggle=True)
+ if mode_string == 'EDIT_MESH':
+ tool_settings = context.tool_settings
+ layout.prop(tool_settings, "use_mesh_automerge", text="")
+ elif mode_string == 'PAINT_WEIGHT':
+ row.popover(panel="VIEW3D_PT_tools_weightpaint_symmetry_for_topbar", text="")
+ elif mode_string == 'SCULPT':
+ row.popover(panel="VIEW3D_PT_sculpt_symmetry_for_topbar", text="")
+ elif mode_string == 'PAINT_VERTEX':
+ row.popover(panel="VIEW3D_PT_tools_vertexpaint_symmetry_for_topbar", text="")
# Expand panels from the side-bar as popovers.
popover_kw = {"space_type": 'VIEW_3D', "region_type": 'UI', "category": "Tool"}
@@ -296,9 +276,8 @@ class _draw_tool_settings_context_mode:
layout.row().prop(brush, "direction", expand=True, text="")
if capabilities.has_color:
- UnifiedPaintPanel.prop_unified_color(layout, context, brush, "color", text = "")
- layout.prop(brush, "blend", text="", expand = False)
-
+ UnifiedPaintPanel.prop_unified_color(layout, context, brush, "color", text="")
+ layout.prop(brush, "blend", text="", expand=False)
return True
@@ -714,7 +693,7 @@ class VIEW3D_HT_header(Header):
text="Multiframe",
)
- if gpd.use_stroke_edit_mode:
+ if gpd.use_stroke_edit_mode or gpd.is_stroke_paint_mode:
row = layout.row(align=True)
row.popover(
panel="VIEW3D_PT_tools_grease_pencil_interpolate",
@@ -836,10 +815,12 @@ class VIEW3D_MT_editor_menus(Menu):
# Select Menu
if gp_edit:
if mode_string not in {'PAINT_GPENCIL', 'WEIGHT_GPENCIL'}:
- if mode_string == 'SCULPT_GPENCIL' and \
- (ts.use_gpencil_select_mask_point or
- ts.use_gpencil_select_mask_stroke or
- ts.use_gpencil_select_mask_segment):
+ if (
+ mode_string == 'SCULPT_GPENCIL' and
+ (ts.use_gpencil_select_mask_point or
+ ts.use_gpencil_select_mask_stroke or
+ ts.use_gpencil_select_mask_segment)
+ ):
layout.menu("VIEW3D_MT_select_gpencil")
elif mode_string == 'EDIT_GPENCIL':
layout.menu("VIEW3D_MT_select_gpencil")
@@ -1155,7 +1136,7 @@ class VIEW3D_MT_view(Menu):
props = layout.operator("render.opengl",
text="Viewport Render Keyframes",
icon='RENDER_ANIMATION',
- )
+ )
props.animation = True
props.render_keyed_only = True
@@ -1824,7 +1805,7 @@ class VIEW3D_MT_select_edit_armature(Menu):
class VIEW3D_MT_select_gpencil(Menu):
bl_label = "Select"
- def draw(self, _context):
+ def draw(self, context):
layout = self.layout
layout.operator("gpencil.select_all", text="All").action = 'SELECT'
@@ -1842,7 +1823,7 @@ class VIEW3D_MT_select_gpencil(Menu):
layout.operator("gpencil.select_alternate")
layout.operator_menu_enum("gpencil.select_grouped", "type", text="Grouped")
- if _context.mode == 'VERTEX_GPENCIL':
+ if context.mode == 'VERTEX_GPENCIL':
layout.operator("gpencil.select_vertex_color", text="Vertex Color")
layout.separator()
@@ -2117,7 +2098,7 @@ class VIEW3D_MT_add(Menu):
# note, don't use 'EXEC_SCREEN' or operators won't get the 'v3d' context.
# Note: was EXEC_AREA, but this context does not have the 'rv3d', which prevents
- # "align_view" to work on first call (see [#32719]).
+ # "align_view" to work on first call (see T32719).
layout.operator_context = 'EXEC_REGION_WIN'
# layout.operator_menu_enum("object.mesh_add", "type", text="Mesh", icon='OUTLINER_OB_MESH')
@@ -2131,7 +2112,7 @@ class VIEW3D_MT_add(Menu):
layout.operator("object.text_add", text="Text", icon='OUTLINER_OB_FONT')
if context.preferences.experimental.use_new_hair_type:
layout.operator("object.hair_add", text="Hair", icon='OUTLINER_OB_HAIR')
- if context.preferences.experimental.use_new_particle_system:
+ if context.preferences.experimental.use_new_point_cloud_type:
layout.operator("object.pointcloud_add", text="Point Cloud", icon='OUTLINER_OB_POINTCLOUD')
layout.menu("VIEW3D_MT_volume_add", text="Volume", icon='OUTLINER_OB_VOLUME')
layout.operator_menu_enum("object.gpencil_add", "type", text="Grease Pencil", icon='OUTLINER_OB_GREASEPENCIL')
@@ -2211,6 +2192,8 @@ class VIEW3D_MT_object_relations(Menu):
layout.operator("object.make_override_library", text="Make Library Override...")
+ layout.operator("object.convert_proxy_to_override")
+
layout.operator("object.make_dupli_face")
layout.separator()
@@ -2276,10 +2259,15 @@ class VIEW3D_MT_object(Menu):
ob = context.active_object
if ob and ob.type == 'GPENCIL' and context.gpencil_data:
- layout.operator_menu_enum("gpencil.convert", "type", text="Convert to")
+ layout.operator_menu_enum("gpencil.convert", "type", text="Convert To")
else:
layout.operator_menu_enum("object.convert", "target")
+ # Potrace lib dependency
+ if bpy.app.build_options.potrace:
+ layout.separator()
+ layout.operator("gpencil.trace_image")
+
layout.separator()
layout.menu("VIEW3D_MT_object_showhide")
@@ -2306,7 +2294,7 @@ class VIEW3D_MT_object_animation(Menu):
layout.separator()
layout.operator("nla.bake", text="Bake Action...")
- layout.operator("gpencil.mesh_bake", text="Bake Mesh to Grease Pencil...")
+ layout.operator("gpencil.bake_mesh_animation", text="Bake Mesh to Grease Pencil...")
class VIEW3D_MT_object_rigid_body(Menu):
@@ -2698,15 +2686,13 @@ class VIEW3D_MT_object_constraints(Menu):
class VIEW3D_MT_object_quick_effects(Menu):
bl_label = "Quick Effects"
- def draw(self, _context):
+ def draw(self, context):
layout = self.layout
layout.operator("object.quick_fur")
layout.operator("object.quick_explode")
layout.operator("object.quick_smoke")
layout.operator("object.quick_liquid")
- if _context.preferences.experimental.use_new_particle_system:
- layout.operator("object.quick_particles")
class VIEW3D_MT_object_showhide(Menu):
@@ -2930,8 +2916,8 @@ class VIEW3D_MT_paint_weight(Menu):
if not is_editmode:
- layout.operator("paint.weight_from_bones", text="Assign Automatic From Bones").type = 'AUTOMATIC'
- layout.operator("paint.weight_from_bones", text="Assign From Bone Envelopes").type = 'ENVELOPES'
+ layout.operator("paint.weight_from_bones", text="Assign Automatic from Bones").type = 'AUTOMATIC'
+ layout.operator("paint.weight_from_bones", text="Assign from Bone Envelopes").type = 'ENVELOPES'
layout.separator()
@@ -3017,7 +3003,10 @@ class VIEW3D_MT_mask(Menu):
props.mode = 'VALUE'
props.value = 0
- props = layout.operator("view3d.select_box", text="Box Mask")
+ props = layout.operator("paint.mask_box_gesture", text="Box Mask")
+ props.mode = 'VALUE'
+ props.value = 0
+
props = layout.operator("paint.mask_lasso_gesture", text="Lasso Mask")
layout.separator()
@@ -3048,14 +3037,14 @@ class VIEW3D_MT_mask(Menu):
layout.separator()
- props = layout.operator("sculpt.mask_expand", text="Expand Mask By Topology")
+ props = layout.operator("sculpt.mask_expand", text="Expand Mask by Topology")
props.use_normals = False
props.keep_previous_mask = False
props.invert = True
props.smooth_iterations = 2
props.create_face_set = False
- props = layout.operator("sculpt.mask_expand", text="Expand Mask By Curvature")
+ props = layout.operator("sculpt.mask_expand", text="Expand Mask by Curvature")
props.use_normals = True
props.keep_previous_mask = True
props.invert = False
@@ -3079,20 +3068,20 @@ class VIEW3D_MT_mask(Menu):
props = layout.operator("sculpt.dirty_mask", text='Dirty Mask')
+
class VIEW3D_MT_face_sets(Menu):
bl_label = "Face Sets"
def draw(self, _context):
layout = self.layout
-
- op = layout.operator("sculpt.face_sets_create", text='Face Set From Masked')
+ op = layout.operator("sculpt.face_sets_create", text='Face Set from Masked')
op.mode = 'MASKED'
- op = layout.operator("sculpt.face_sets_create", text='Face Set From Visible')
+ op = layout.operator("sculpt.face_sets_create", text='Face Set from Visible')
op.mode = 'VISIBLE'
- op = layout.operator("sculpt.face_sets_create", text='Face Set From Edit Mode Selection')
+ op = layout.operator("sculpt.face_sets_create", text='Face Set from Edit Mode Selection')
op.mode = 'SELECTION'
layout.separator()
@@ -3145,6 +3134,7 @@ class VIEW3D_MT_sculpt_set_pivot(Menu):
props = layout.operator("sculpt.set_pivot_position", text="Pivot to Surface Under Cursor")
props.mode = 'SURFACE'
+
class VIEW3D_MT_face_sets_init(Menu):
bl_label = "Face Sets Init"
@@ -3261,6 +3251,7 @@ class VIEW3D_MT_particle_context_menu(Menu):
layout.operator("particle.select_linked", text="Select Linked")
+
class VIEW3D_MT_particle_showhide(ShowHideMenu, Menu):
_operator_name = "particle"
@@ -3439,7 +3430,7 @@ class VIEW3D_MT_pose_constraints(Menu):
def draw(self, _context):
layout = self.layout
- layout.operator("pose.constraint_add_with_targets", text="Add (With Targets)...")
+ layout.operator("pose.constraint_add_with_targets", text="Add (with Targets)...")
layout.operator("pose.constraints_copy")
layout.operator("pose.constraints_clear")
@@ -3451,9 +3442,9 @@ class VIEW3D_MT_pose_names(Menu):
layout = self.layout
layout.operator_context = 'EXEC_REGION_WIN'
- layout.operator("pose.autoside_names", text="AutoName Left/Right").axis = 'XAXIS'
- layout.operator("pose.autoside_names", text="AutoName Front/Back").axis = 'YAXIS'
- layout.operator("pose.autoside_names", text="AutoName Top/Bottom").axis = 'ZAXIS'
+ layout.operator("pose.autoside_names", text="Auto-Name Left/Right").axis = 'XAXIS'
+ layout.operator("pose.autoside_names", text="Auto-Name Front/Back").axis = 'YAXIS'
+ layout.operator("pose.autoside_names", text="Auto-Name Top/Bottom").axis = 'ZAXIS'
layout.operator("pose.flip_names")
@@ -4162,7 +4153,7 @@ class VIEW3D_MT_edit_mesh_normals(Menu):
layout.separator()
- layout.operator("mesh.set_normals_from_faces", text="Set From Faces")
+ layout.operator("mesh.set_normals_from_faces", text="Set from Faces")
layout.operator_context = 'INVOKE_REGION_WIN'
layout.operator("transform.rotate_normal", text="Rotate...")
@@ -4780,9 +4771,9 @@ class VIEW3D_MT_edit_armature_names(Menu):
layout = self.layout
layout.operator_context = 'EXEC_REGION_WIN'
- layout.operator("armature.autoside_names", text="AutoName Left/Right").type = 'XAXIS'
- layout.operator("armature.autoside_names", text="AutoName Front/Back").type = 'YAXIS'
- layout.operator("armature.autoside_names", text="AutoName Top/Bottom").type = 'ZAXIS'
+ layout.operator("armature.autoside_names", text="Auto-Name Left/Right").type = 'XAXIS'
+ layout.operator("armature.autoside_names", text="Auto-Name Front/Back").type = 'YAXIS'
+ layout.operator("armature.autoside_names", text="Auto-Name Top/Bottom").type = 'ZAXIS'
layout.operator("armature.flip_names", text="Flip Names")
@@ -4949,9 +4940,9 @@ class VIEW3D_MT_edit_gpencil(Menu):
class VIEW3D_MT_edit_gpencil_stroke(Menu):
bl_label = "Stroke"
- def draw(self, _context):
+ def draw(self, context):
layout = self.layout
- settings = _context.tool_settings.gpencil_sculpt
+ settings = context.tool_settings.gpencil_sculpt
layout.operator("gpencil.stroke_subdivide", text="Subdivide").only_selected = False
layout.menu("VIEW3D_MT_gpencil_simplify")
@@ -5085,7 +5076,7 @@ class VIEW3D_MT_edit_gpencil_transform(Menu):
class VIEW3D_MT_edit_gpencil_showhide(Menu):
- bl_label = "Show/hide"
+ bl_label = "Show/Hide"
def draw(self, _context):
layout = self.layout
@@ -5296,6 +5287,22 @@ class VIEW3D_MT_sculpt_mask_edit_pie(Menu):
op.filter_type = 'CONTRAST_DECREASE'
op.auto_iteration_count = False
+class VIEW3D_MT_sculpt_automasking_pie(Menu):
+ bl_label = "Automasking"
+
+ def draw(self, context):
+ layout = self.layout
+ pie = layout.menu_pie()
+
+ tool_settings = context.tool_settings
+ sculpt = tool_settings.sculpt
+
+ pie.prop(sculpt, "use_automasking_topology", text="Topology")
+ pie.prop(sculpt, "use_automasking_face_sets", text="Face Sets")
+ pie.prop(sculpt, "use_automasking_boundary_edges", text="Mesh Boundary")
+ pie.prop(sculpt, "use_automasking_boundary_face_sets", text="Face Sets Boundary")
+
+
class VIEW3D_MT_sculpt_face_sets_edit_pie(Menu):
bl_label = "Face Sets Edit"
@@ -5304,10 +5311,10 @@ class VIEW3D_MT_sculpt_face_sets_edit_pie(Menu):
layout = self.layout
pie = layout.menu_pie()
- op = pie.operator("sculpt.face_sets_create", text='Face Set From Masked')
+ op = pie.operator("sculpt.face_sets_create", text='Face Set from Masked')
op.mode = 'MASKED'
- op = pie.operator("sculpt.face_sets_create", text='Face Set From Visible')
+ op = pie.operator("sculpt.face_sets_create", text='Face Set from Visible')
op.mode = 'VISIBLE'
op = pie.operator("sculpt.face_set_change_visibility", text='Invert Visible')
@@ -5316,6 +5323,7 @@ class VIEW3D_MT_sculpt_face_sets_edit_pie(Menu):
op = pie.operator("sculpt.face_set_change_visibility", text='Show All')
op.mode = 'SHOW_ALL'
+
class VIEW3D_MT_wpaint_vgroup_lock_pie(Menu):
bl_label = "Vertex Group Locks"
@@ -5393,7 +5401,6 @@ class VIEW3D_PT_view3d_properties(Panel):
layout.use_property_split = True
layout.use_property_decorate = False # No animation.
-
col = layout.column()
subcol = col.column()
@@ -5560,15 +5567,17 @@ class VIEW3D_PT_object_type_visibility(Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'HEADER'
bl_label = "View Object Types"
- bl_ui_units_x = 6
+ bl_ui_units_x = 7
def draw(self, context):
layout = self.layout
layout.use_property_split = True
+ layout.use_property_decorate = False
view = context.space_data
layout.label(text="Object Types Visibility")
+ layout.separator()
col = layout.column()
attr_object_types = (
@@ -5720,7 +5729,12 @@ class VIEW3D_PT_shading_lighting(Panel):
split = layout.split(factor=0.9)
col = split.column()
- col.prop(shading, "studiolight_rotate_z", text="Rotation")
+
+ row = col.row()
+ row.prop(shading, "use_studiolight_view_rotation", text="", icon='WORLD', toggle=True)
+ row = row.row()
+ row.prop(shading, "studiolight_rotate_z", text="Rotation")
+
col.prop(shading, "studiolight_intensity")
col.prop(shading, "studiolight_background_alpha")
col.prop(shading, "studiolight_background_blur")
@@ -5865,7 +5879,7 @@ class VIEW3D_PT_shading_options(Panel):
row = col.row()
row.active = not xray_active
- row.prop(shading, "use_dof", text="Depth Of Field")
+ row.prop(shading, "use_dof", text="Depth of Field")
if shading.type in {'WIREFRAME', 'SOLID'}:
row = layout.split()
@@ -5938,6 +5952,7 @@ class VIEW3D_PT_gizmo_display(Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'HEADER'
bl_label = "Gizmo"
+ bl_ui_units_x = 8
def draw(self, context):
layout = self.layout
@@ -5947,6 +5962,7 @@ class VIEW3D_PT_gizmo_display(Panel):
col = layout.column()
col.label(text="Viewport Gizmos")
+ col.separator()
col.active = view.show_gizmo
colsub = col.column()
@@ -6112,6 +6128,16 @@ class VIEW3D_PT_overlay_geometry(Panel):
sub.active = overlay.show_wireframes or is_wireframes
sub.prop(overlay, "wireframe_threshold", text="Wireframe")
+ row = col.row(align=True)
+ if context.mode not in {
+ 'EDIT_ARMATURE', 'POSE', 'OBJECT',
+ 'PAINT_GPENCIL', 'VERTEX_GPENCIL', 'WEIGHT_GPENCIL', 'SCULPT_GPENCIL', 'EDIT_GPENCIL',
+ }:
+ row.prop(overlay, "show_fade_inactive", text="")
+ sub = row.row()
+ sub.active = overlay.show_fade_inactive
+ sub.prop(overlay, "fade_inactive_alpha", text="Fade Inactive Geometry")
+
col = layout.column(align=True)
col.active = display_all
@@ -6547,7 +6573,7 @@ class VIEW3D_PT_snapping(Panel):
layout = self.layout
col = layout.column()
- col.label(text="Snap to")
+ col.label(text="Snap To")
col.prop(tool_settings, "snap_elements", expand=True)
col.separator()
@@ -6555,7 +6581,7 @@ class VIEW3D_PT_snapping(Panel):
col.prop(tool_settings, "use_snap_grid_absolute")
if snap_elements != {'INCREMENT'}:
- col.label(text="Snap with")
+ col.label(text="Snap With")
row = col.row(align=True)
row.prop(tool_settings, "snap_target", expand=True)
@@ -6591,7 +6617,7 @@ class VIEW3D_PT_proportional_edit(Panel):
tool_settings = context.tool_settings
col = layout.column()
col.active = (tool_settings.use_proportional_edit_objects if context.mode == 'OBJECT'
- else tool_settings.use_proportional_edit)
+ else tool_settings.use_proportional_edit)
if context.mode != 'OBJECT':
col.prop(tool_settings, "use_proportional_connected")
@@ -6771,7 +6797,7 @@ class VIEW3D_PT_overlay_gpencil_options(Panel):
col = split.column()
col.prop(overlay, "use_gpencil_show_directions")
col = split.column()
- col.prop(overlay, "use_gpencil_show_material_name", text="Material Name")
+ col.prop(overlay, "use_gpencil_show_material_name", text="Material Name")
layout.prop(overlay, "vertex_opacity", text="Vertex Opacity", slider=True)
@@ -6954,7 +6980,7 @@ class VIEW3D_MT_gpencil_edit_context_menu(Menu):
row = layout.row()
if is_point_mode or is_segment_mode:
- col = row.column()
+ col = row.column(align=True)
col.label(text="Point Context Menu", icon='GP_SELECT_POINTS')
col.separator()
@@ -7005,7 +7031,7 @@ class VIEW3D_MT_gpencil_edit_context_menu(Menu):
if is_stroke_mode:
- col = row.column()
+ col = row.column(align=True)
col.label(text="Stroke Context Menu", icon='GP_SELECT_STROKES')
col.separator()
@@ -7058,26 +7084,26 @@ class VIEW3D_MT_gpencil_edit_context_menu(Menu):
def draw_gpencil_layer_active(context, layout):
- gpl = context.active_gpencil_layer
- if gpl:
- layout.label(text="Active Layer")
- row = layout.row(align=True)
- row.operator_context = 'EXEC_REGION_WIN'
- row.operator_menu_enum("gpencil.layer_change", "layer", text="", icon='GREASEPENCIL')
- row.prop(gpl, "info", text="")
- row.operator("gpencil.layer_remove", text="", icon='X')
+ gpl = context.active_gpencil_layer
+ if gpl:
+ layout.label(text="Active Layer")
+ row = layout.row(align=True)
+ row.operator_context = 'EXEC_REGION_WIN'
+ row.operator_menu_enum("gpencil.layer_change", "layer", text="", icon='GREASEPENCIL')
+ row.prop(gpl, "info", text="")
+ row.operator("gpencil.layer_remove", text="", icon='X')
def draw_gpencil_material_active(context, layout):
- ob = context.active_object
- if ob and len(ob.material_slots) > 0 and ob.active_material_index >= 0:
- ma = ob.material_slots[ob.active_material_index].material
- if ma:
- layout.label(text="Active Material")
- row = layout.row(align=True)
- row.operator_context = 'EXEC_REGION_WIN'
- row.operator_menu_enum("gpencil.material_set", "slot", text="", icon='MATERIAL')
- row.prop(ma, "name", text="")
+ ob = context.active_object
+ if ob and len(ob.material_slots) > 0 and ob.active_material_index >= 0:
+ ma = ob.material_slots[ob.active_material_index].material
+ if ma:
+ layout.label(text="Active Material")
+ row = layout.row(align=True)
+ row.operator_context = 'EXEC_REGION_WIN'
+ row.operator_menu_enum("gpencil.material_set", "slot", text="", icon='MATERIAL')
+ row.prop(ma, "name", text="")
class VIEW3D_PT_gpencil_sculpt_context_menu(Panel):
@@ -7134,7 +7160,8 @@ class VIEW3D_PT_gpencil_draw_context_menu(Panel):
gp_settings = brush.gpencil_settings
layout = self.layout
- is_vertex = settings.color_mode == 'VERTEXCOLOR' or brush.gpencil_tool == 'TINT'
+ is_pin_vertex = gp_settings.brush_draw_mode == 'VERTEXCOLOR'
+ is_vertex = settings.color_mode == 'VERTEXCOLOR' or brush.gpencil_tool == 'TINT' or is_pin_vertex
if brush.gpencil_tool not in {'ERASE', 'CUTTER', 'EYEDROPPER'} and is_vertex:
split = layout.split(factor=0.1)
@@ -7394,6 +7421,7 @@ class TOPBAR_PT_gpencil_vertexcolor(GreasePencilVertexcolorPanel, Panel):
ob = context.object
return ob and ob.type == 'GPENCIL'
+
classes = (
VIEW3D_HT_header,
VIEW3D_HT_tool_header,
@@ -7564,6 +7592,7 @@ classes = (
VIEW3D_MT_orientations_pie,
VIEW3D_MT_proportional_editing_falloff_pie,
VIEW3D_MT_sculpt_mask_edit_pie,
+ VIEW3D_MT_sculpt_automasking_pie,
VIEW3D_MT_wpaint_vgroup_lock_pie,
VIEW3D_MT_sculpt_face_sets_edit_pie,
VIEW3D_PT_active_tool,
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 6359426128f..8c0103d10e6 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -123,16 +123,12 @@ class View3DPanel:
# **************** standard tool clusters ******************
# Used by vertex & weight paint
-def draw_vpaint_symmetry(layout, vpaint):
-
+def draw_vpaint_symmetry(layout, vpaint, mesh):
col = layout.column()
- col.use_property_split = True
- col.use_property_decorate = False
-
row = col.row(heading="Mirror", align=True)
- row.prop(vpaint, "use_symmetry_x", text="X", toggle=True)
- row.prop(vpaint, "use_symmetry_y", text="Y", toggle=True)
- row.prop(vpaint, "use_symmetry_z", text="Z", toggle=True)
+ row.prop(mesh, "use_mirror_x", text="X", toggle=True)
+ row.prop(mesh, "use_mirror_y", text="Y", toggle=True)
+ row.prop(mesh, "use_mirror_z", text="Z", toggle=True)
col.prop(vpaint, "radial_symmetry", text="Radial")
@@ -681,7 +677,7 @@ class VIEW3D_PT_tools_brush_falloff(Panel, View3DPaintPanel, FalloffPanel):
class VIEW3D_PT_tools_brush_falloff_frontface(View3DPaintPanel, Panel):
bl_context = ".imagepaint" # dot on purpose (access from topbar)
- bl_label = "Front-face Falloff"
+ bl_label = "Front-Face Falloff"
bl_parent_id = "VIEW3D_PT_tools_brush_falloff"
bl_options = {'DEFAULT_CLOSED'}
@@ -824,7 +820,6 @@ class VIEW3D_PT_sculpt_voxel_remesh(Panel, View3DPaintPanel):
if context.preferences.experimental.use_sculpt_vertex_colors:
col.prop(mesh, "use_remesh_preserve_vertex_colors", text="Vertex Colors")
-
layout.operator("object.voxel_remesh", text="Remesh")
@@ -907,9 +902,10 @@ class VIEW3D_PT_sculpt_symmetry(Panel, View3DPaintPanel):
sculpt = context.tool_settings.sculpt
row = layout.row(align=True, heading="Mirror")
- row.prop(sculpt, "use_symmetry_x", text="X", toggle=True)
- row.prop(sculpt, "use_symmetry_y", text="Y", toggle=True)
- row.prop(sculpt, "use_symmetry_z", text="Z", toggle=True)
+ mesh = context.object.data
+ row.prop(mesh, "use_mirror_x", text="X", toggle=True)
+ row.prop(mesh, "use_mirror_y", text="Y", toggle=True)
+ row.prop(mesh, "use_mirror_z", text="Z", toggle=True)
row = layout.row(align=True, heading="Lock")
row.prop(sculpt, "lock_x", text="X", toggle=True)
@@ -955,10 +951,20 @@ class VIEW3D_PT_tools_weightpaint_symmetry(Panel, View3DPaintPanel):
def draw(self, context):
layout = self.layout
+ layout.use_property_split = True
+ layout.use_property_decorate = False
+
tool_settings = context.tool_settings
wpaint = tool_settings.weight_paint
- draw_vpaint_symmetry(layout, wpaint)
+ mesh = context.object.data
+ draw_vpaint_symmetry(layout, wpaint, mesh)
+
+ col = layout.column(align=True)
+ col.prop(mesh, 'use_mirror_vertex_group_x', text="Vertex Group X")
+ row = col.row()
+ row.active = mesh.use_mirror_vertex_group_x
+ row.prop(mesh, "use_mirror_topology")
class VIEW3D_PT_tools_weightpaint_symmetry_for_topbar(Panel):
bl_space_type = 'TOPBAR'
@@ -991,14 +997,6 @@ class VIEW3D_PT_tools_weightpaint_options(Panel, View3DPaintPanel):
col.prop(wpaint, "use_group_restrict")
- obj = context.weight_paint_object
- if obj.type == 'MESH':
- mesh = obj.data
- col.prop(mesh, "use_mirror_x")
- row = col.row()
- row.active = mesh.use_mirror_x
- row.prop(mesh, "use_mirror_topology")
-
# ********** default tools for vertex-paint ****************
@@ -1033,9 +1031,13 @@ class VIEW3D_PT_tools_vertexpaint_symmetry(Panel, View3DPaintPanel):
def draw(self, context):
layout = self.layout
+ layout.use_property_split = True
+ layout.use_property_decorate = False
+
tool_settings = context.tool_settings
vpaint = tool_settings.vertex_paint
- draw_vpaint_symmetry(layout, vpaint)
+
+ draw_vpaint_symmetry(layout, vpaint, context.object.data)
class VIEW3D_PT_tools_vertexpaint_symmetry_for_topbar(Panel):
@@ -1091,9 +1093,6 @@ class VIEW3D_PT_tools_imagepaint_symmetry(Panel, View3DPaintPanel):
def draw(self, context):
layout = self.layout
- tool_settings = context.tool_settings
- ipaint = tool_settings.image_paint
-
split = layout.split()
col = split.column()
@@ -1103,9 +1102,10 @@ class VIEW3D_PT_tools_imagepaint_symmetry(Panel, View3DPaintPanel):
col = split.column()
row = col.row(align=True)
- row.prop(ipaint, "use_symmetry_x", text="X", toggle=True)
- row.prop(ipaint, "use_symmetry_y", text="Y", toggle=True)
- row.prop(ipaint, "use_symmetry_z", text="Z", toggle=True)
+ mesh = context.object.data
+ row.prop(mesh, "use_mirror_x", text="X", toggle=True)
+ row.prop(mesh, "use_mirror_y", text="Y", toggle=True)
+ row.prop(mesh, "use_mirror_z", text="Z", toggle=True)
# TODO, move to space_view3d.py
@@ -1232,7 +1232,7 @@ class VIEW3D_PT_tools_particlemode_options(View3DPanel, Panel):
col.active = pe.is_editable
col.prop(ob.data, "use_mirror_x")
if pe.tool == 'ADD':
- col.prop(ob.data, "use_mirror_topology")
+ col.prop(ob.data, "use_mirror_topology")
col.separator()
col.prop(pe, "use_preserve_length", text="Preserve Strand Lengths")
col.prop(pe, "use_preserve_root", text="Preserve Root Positions")
@@ -1400,9 +1400,6 @@ class VIEW3D_PT_tools_grease_pencil_brush_advanced(View3DPanel, Panel):
col = layout.column(align=True)
if brush is not None:
- col.prop(gp_settings, "brush_draw_mode")
- col.separator()
-
if brush.gpencil_tool != 'FILL':
col.prop(gp_settings, "input_samples")
col.separator()
@@ -1553,7 +1550,7 @@ class VIEW3D_PT_tools_grease_pencil_brush_post_processing(View3DPanel, Panel):
col1.prop(gp_settings, "simplify_factor")
col1 = col.column(align=True)
- col1.prop(gp_settings, "trim")
+ col1.prop(gp_settings, "use_trim")
class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel):
@@ -1600,7 +1597,7 @@ class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel):
row.prop(gp_settings, "use_random_press_radius", text="", icon='STYLUS_PRESSURE')
if gp_settings.use_random_press_radius and self.is_popover is False:
col.template_curve_mapping(gp_settings, "curve_random_pressure", brush=True,
- use_negative_slope=True)
+ use_negative_slope=True)
row = col.row(align=True)
row.prop(gp_settings, "random_strength", text="Strength", slider=True)
@@ -1608,7 +1605,7 @@ class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel):
row.prop(gp_settings, "use_random_press_strength", text="", icon='STYLUS_PRESSURE')
if gp_settings.use_random_press_strength and self.is_popover is False:
col.template_curve_mapping(gp_settings, "curve_random_strength", brush=True,
- use_negative_slope=True)
+ use_negative_slope=True)
row = col.row(align=True)
row.prop(gp_settings, "uv_random", text="UV", slider=True)
@@ -1616,7 +1613,7 @@ class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel):
row.prop(gp_settings, "use_random_press_uv", text="", icon='STYLUS_PRESSURE')
if gp_settings.use_random_press_uv and self.is_popover is False:
col.template_curve_mapping(gp_settings, "curve_random_uv", brush=True,
- use_negative_slope=True)
+ use_negative_slope=True)
col.separator()
@@ -1628,7 +1625,7 @@ class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel):
row.prop(gp_settings, "use_random_press_hue", text="", icon='STYLUS_PRESSURE')
if gp_settings.use_random_press_hue and self.is_popover is False:
col1.template_curve_mapping(gp_settings, "curve_random_hue", brush=True,
- use_negative_slope=True)
+ use_negative_slope=True)
row = col1.row(align=True)
row.prop(gp_settings, "random_saturation_factor", slider=True)
@@ -1636,7 +1633,7 @@ class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel):
row.prop(gp_settings, "use_random_press_sat", text="", icon='STYLUS_PRESSURE')
if gp_settings.use_random_press_sat and self.is_popover is False:
col1.template_curve_mapping(gp_settings, "curve_random_saturation", brush=True,
- use_negative_slope=True)
+ use_negative_slope=True)
row = col1.row(align=True)
row.prop(gp_settings, "random_value_factor", slider=True)
@@ -1644,7 +1641,7 @@ class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel):
row.prop(gp_settings, "use_random_press_val", text="", icon='STYLUS_PRESSURE')
if gp_settings.use_random_press_val and self.is_popover is False:
col1.template_curve_mapping(gp_settings, "curve_random_value", brush=True,
- use_negative_slope=True)
+ use_negative_slope=True)
col.separator()
@@ -1653,7 +1650,7 @@ class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel):
row.prop(gp_settings, "use_jitter_pressure", text="", icon='STYLUS_PRESSURE')
if gp_settings.use_jitter_pressure and self.is_popover is False:
col.template_curve_mapping(gp_settings, "curve_jitter", brush=True,
- use_negative_slope=True)
+ use_negative_slope=True)
class VIEW3D_PT_tools_grease_pencil_brush_paint_falloff(GreasePencilBrushFalloff, Panel, View3DPaintPanel):
@@ -1686,7 +1683,8 @@ class VIEW3D_PT_tools_grease_pencil_interpolate(Panel):
return False
gpd = context.gpencil_data
- return bool(context.editable_gpencil_strokes) and bool(gpd.use_stroke_edit_mode)
+ valid_mode = bool(gpd.use_stroke_edit_mode or gpd.is_stroke_paint_mode)
+ return bool(context.editable_gpencil_strokes) and valid_mode
def draw(self, context):
layout = self.layout
@@ -1701,7 +1699,10 @@ class VIEW3D_PT_tools_grease_pencil_interpolate(Panel):
col = layout.column(align=True)
col.label(text="Options:")
col.prop(settings, "interpolate_all_layers")
- col.prop(settings, "interpolate_selected_only")
+
+ gpd = context.gpencil_data
+ if gpd.use_stroke_edit_mode:
+ col.prop(settings, "interpolate_selected_only")
col = layout.column(align=True)
col.label(text="Sequence Options:")
diff --git a/release/scripts/startup/keyingsets_builtins.py b/release/scripts/startup/keyingsets_builtins.py
index 19d565d10b6..6dffeac35ce 100644
--- a/release/scripts/startup/keyingsets_builtins.py
+++ b/release/scripts/startup/keyingsets_builtins.py
@@ -539,7 +539,7 @@ class BUILTIN_KSI_WholeCharacterSelected(KeyingSetInfo):
"""Insert a keyframe for all properties that are likely to get animated in a character rig """ \
"""(only selected bones)"""
bl_idname = ANIM_KS_WHOLE_CHARACTER_SELECTED_ID
- bl_label = "Whole Character (Selected bones only)"
+ bl_label = "Whole Character (Selected Bones Only)"
# iterator - all bones regardless of selection
def iterator(ksi, context, ks):
diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py
index 0cf0a99c326..8d2b6198fd5 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -475,72 +475,16 @@ texture_node_categories = [
]),
]
+
def not_implemented_node(idname):
NodeType = getattr(bpy.types, idname)
name = NodeType.bl_rna.name
label = "%s (mockup)" % name
return NodeItem(idname, label=label)
+
simulation_node_categories = [
# Simulation Nodes
- SimulationNodeCategory("SIM_OUTPUT", "Output", items=[
- NodeItem("SimulationNodeParticleSimulation"),
- ]),
- SimulationNodeCategory("SIM_INPUTS", "Input", items=[
- NodeItem("SimulationNodeTime"),
- NodeItem("SimulationNodeParticleAttribute"),
- NodeItem("FunctionNodeGroupInstanceID"),
- NodeItem("ShaderNodeValue"),
- NodeItem("FunctionNodeObjectTransforms"),
- ]),
- SimulationNodeCategory("SIM_EMITTERS", "Emitters", items=[
- NodeItem("SimulationNodeParticleMeshEmitter"),
- not_implemented_node("SimulationNodeEmitParticles"),
- ]),
- SimulationNodeCategory("SIM_EVENTS", "Events", items=[
- NodeItem("SimulationNodeParticleBirthEvent"),
- NodeItem("SimulationNodeParticleTimeStepEvent"),
- NodeItem("SimulationNodeAgeReachedEvent"),
- not_implemented_node("SimulationNodeParticleMeshCollisionEvent"),
- ]),
- SimulationNodeCategory("SIM_FORCES", "Forces", items=[
- NodeItem("SimulationNodeForce"),
- ]),
- SimulationNodeCategory("SIM_EXECUTE", "Execute", items=[
- NodeItem("SimulationNodeSetParticleAttribute"),
- NodeItem("SimulationNodeExecuteCondition"),
- NodeItem("SimulationNodeKillParticle"),
- not_implemented_node("SimulationNodeMultiExecute"),
- ]),
- SimulationNodeCategory("SIM_NOISE", "Noise", items=[
- not_implemented_node("ShaderNodeTexNoise"),
- not_implemented_node("ShaderNodeTexWhiteNoise"),
- ]),
- SimulationNodeCategory("SIM_COLOR", "Color", items=[
- not_implemented_node("ShaderNodeMixRGB"),
- not_implemented_node("ShaderNodeInvert"),
- not_implemented_node("ShaderNodeHueSaturation"),
- not_implemented_node("ShaderNodeGamma"),
- not_implemented_node("ShaderNodeBrightContrast"),
- ]),
- SimulationNodeCategory("SIM_CONVERTER", "Converter", items=[
- NodeItem("ShaderNodeMapRange"),
- NodeItem("ShaderNodeClamp"),
- NodeItem("ShaderNodeMath"),
- NodeItem("ShaderNodeValToRGB"),
- NodeItem("ShaderNodeVectorMath"),
- NodeItem("ShaderNodeSeparateRGB"),
- NodeItem("ShaderNodeCombineRGB"),
- NodeItem("ShaderNodeSeparateXYZ"),
- NodeItem("ShaderNodeCombineXYZ"),
- not_implemented_node("ShaderNodeSeparateHSV"),
- not_implemented_node("ShaderNodeCombineHSV"),
- NodeItem("FunctionNodeBooleanMath"),
- NodeItem("FunctionNodeFloatCompare"),
- not_implemented_node("FunctionNodeSwitch"),
- NodeItem("FunctionNodeCombineStrings"),
- NodeItem("FunctionNodeRandomFloat"),
- ]),
SimulationNodeCategory("SIM_GROUP", "Group", items=node_group_items),
SimulationNodeCategory("SIM_LAYOUT", "Layout", items=[
NodeItem("NodeFrame"),