diff options
Diffstat (limited to 'release')
26 files changed, 1193 insertions, 600 deletions
diff --git a/release/datafiles/blender_icons.svg b/release/datafiles/blender_icons.svg index c3461fd1bea..70bd7dc8085 100644 --- a/release/datafiles/blender_icons.svg +++ b/release/datafiles/blender_icons.svg @@ -17321,6 +17321,58 @@ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 368.30892,141.58547 c -0.27613,4e-5 -0.49997,0.22388 -0.5,0.5 v 1.26473 h -4.76715 v 1.4911 h 4.76715 v 1.24417 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 0.63583,0.004 3.43318,-0.006 3.9995,-0.006 0.24106,0 0.46127,-0.0485 0.46127,-0.50967 4e-5,-0.85242 -8.9e-4,-2.98571 -8.9e-4,-3.95935 0,-0.30244 -0.19636,-0.51552 -0.46153,-0.51552 -0.82724,0 -3.36276,-0.009 -3.99823,-0.009 v 2e-5 z m 2.30359,-4.68113 -0.005,4.25868 c 0.48989,0.002 1.39549,0.005 1.88538,0.007 0.44541,0.0357 0.71675,0.47423 0.71675,0.85988 -6.6e-4,1.00616 -0.009,2.97018 -0.009,4.15122 0,0.46073 -0.24756,0.84994 -0.6533,0.84994 -0.48399,0.0143 -1.44986,-1.1e-4 -1.93405,-1.6e-4 v 3.87356 l -7.75691,-0.0669 v -14.00001 z" sodipodi:nodetypes="cccccccccccccccccccccccccc" /> + <g + transform="translate(230.76791,210.17135)" + style="display:inline;enable-background:new" + id="g4087_GP_lineart"> + <g + id="g4082"> + <path + sodipodi:nodetypes="cccccccccccccccccccc" + inkscape:connector-curvature="0" + id="path12456-6" + mask="none" + d="m 198.0253,98.27163 v 1.5 h 1 v -1.5 z m 0,2.5 v 2 h 1 v -2 z m 0,3 v 1.2793 l -2.58594,2.35156 0.67188,0.73828 2.60351,-2.36719 0.49027,-0.002 c 0.82475,0 0.82408,-1 0,-1 h -0.17972 v -1 z" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <path + id="path4185" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.10423;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 207.2397,99.568306 c -0.33768,-0.02992 -0.70751,0.105959 -1.01625,0.406518 l -0.51139,0.495896 c -0.13287,0.12942 -0.13287,0.34092 0,0.47035 l 2.04339,1.98784 c 0.13292,0.12938 0.3479,0.12938 0.48082,0 l 0.50922,-0.49802 c 0.3087,-0.30067 0.44811,-0.65869 0.41741,-0.98755 -0.0307,-0.32884 -0.20718,-0.60186 -0.41741,-0.80663 l -0.67969,-0.661886 c -0.21026,-0.204768 -0.48842,-0.37662 -0.8261,-0.406518 z m -2.31222,1.800554 c -0.0883,9.4e-4 -0.17353,0.0367 -0.23603,0.0979 l -4.25293,4.14168 c -0.0434,0.0426 -0.0749,0.095 -0.0896,0.15324 l -0.67969,2.65189 c -0.0614,0.24217 0.16235,0.46285 0.41088,0.40225 l 2.72308,-0.66402 c 0.0599,-0.0144 0.11363,-0.0428 0.15735,-0.0851 l 4.2551,-4.14382 c 0.13286,-0.12943 0.13286,-0.33881 0,-0.46825 l -2.0434,-1.98784 c -0.0651,-0.0634 -0.15267,-0.0994 -0.24478,-0.0979 z" /> + <path + id="path12458-7" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 198.52539,94.771484 c -0.1326,2.7e-5 -0.25978,0.05272 -0.35351,0.146485 l -3,3 c -0.0938,0.09376 -0.14646,0.220915 -0.14649,0.353515 v 9.999996 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 2.50158 c 0.72806,0 0.76638,-1.01916 0,-1 h -2.00158 v -8.999996 h 9 v 0.186392 c 0,0.766385 1,0.767345 1,0 v -0.47936 l 2,-2 v 0.907841 c 0,0.708905 1,0.709935 1,0 v -2.114873 c -3e-5,-0.276131 -0.22387,-0.499972 -0.5,-0.5 z m 0.20703,1 h 8.58594 l -2,2 h -8.58594 z" + sodipodi:nodetypes="ccccccsccccssccsscccccccc" /> + </g> + </g> + <g + transform="translate(167.42608,209.69482)" + style="display:inline;enable-background:new" + id="g7880_GP_lenght"> + <path + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 224.38607,100.78271 c -0.15574,0.005 -0.30353,0.0699 -0.41211,0.18164 l -2.05673,2.00254 c -0.62065,0.56444 0.28322,1.46831 0.84766,0.84765 l 2.05673,-2.00254 c 0.39088,-0.38144 0.1104,-1.04428 -0.43555,-1.02929 z" + id="path15289-7-6" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccc" /> + <path + sodipodi:nodetypes="ccccccccccc" + inkscape:connector-curvature="0" + id="path15289-7-6-5" + d="m 225.6621,95.349988 c -0.67621,-0.0096 -0.67621,1.009611 0,1 h 2.79493 c -1.0479,1.117288 -1.7641,1.668027 -2.82812,2.732043 -0.62065,0.56444 0.28321,1.468319 0.84765,0.847657 1.06063,-1.101282 1.59202,-1.777197 2.68554,-2.870716 v 2.791016 c -0.01,0.676162 1.00956,0.676162 1,0 v -4 c -3e-5,-0.276131 -0.22387,-0.499973 -0.5,-0.5 z" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <path + sodipodi:nodetypes="ccccccccccc" + inkscape:connector-curvature="0" + id="path15289-7-6-5-2" + d="m 221.03217,109.33958 c 0.67621,0.01 0.67621,-1.00961 0,-1 h -2.79493 c 1.0479,-1.11729 1.7641,-1.66802 2.82812,-2.73204 0.62065,-0.56444 -0.28321,-1.46832 -0.84765,-0.84766 -1.06063,1.10128 -1.59202,1.7772 -2.68554,2.87072 v -2.79102 c 0.01,-0.67616 -1.00956,-0.67616 -1,0 v 4 c 3e-5,0.27613 0.22387,0.49998 0.5,0.5 z" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + </g> + <path + sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" + d="m 417.92349,304.73964 c -0.7818,-0.0644 -0.86293,1.09626 -0.0796,1.1383 l 0.41758,0.0202 c 0.78182,0.0644 0.86296,-1.09626 0.0796,-1.13831 z m -7.87437,1.29265 c -0.65325,0.42724 0.0163,1.38626 0.65667,0.94062 l 0.34001,-0.23929 c 0.65327,-0.42727 -0.0163,-1.38631 -0.65662,-0.94061 z m 5.26412,-0.10772 c 0.785,-0.0185 0.73895,-1.18175 -0.0451,-1.14009 -0.6811,-0.0652 -1.43225,-0.0213 -2.22341,0.0851 -0.785,0.0185 -0.73896,1.18176 0.0451,1.14011 0.8585,-0.10954 1.60282,-0.14009 2.22342,-0.0852 z m -5.74172,5.34858 c -0.17789,-0.75187 -1.32618,-0.47161 -1.12597,0.27482 -0.008,0.72815 0.18352,1.43475 0.53595,2.12392 0.17789,0.75187 1.32617,0.47159 1.12598,-0.27483 -0.40688,-0.70818 -0.47775,-1.41605 -0.53596,-2.12391 z m 1.14987,4.81425 c 0.55238,0.5479 1.3799,-0.2833 0.81165,-0.81524 l -0.30437,-0.28193 c -0.55238,-0.54789 -1.37991,0.2833 -0.81163,0.81524 z m 2.55883,0.11471 c -0.78112,0.0716 -0.65484,1.22767 0.12391,1.13446 0.79706,0.0708 1.5429,0.0136 2.2124,-0.23372 0.7811,-0.0716 0.65482,-1.22768 -0.12391,-1.13445 -0.66955,0.35373 -1.42049,0.37687 -2.2124,0.23371 z m 4.35036,-1.24066 c 0.39775,-0.66505 -0.63058,-1.23994 -1.00859,-0.56384 l -0.19953,0.36135 c -0.39776,0.66506 0.63057,1.23995 1.00857,0.56383 z m -1.53457,-4.82813 c -0.44444,-0.63566 -1.409,0.0364 -0.94666,0.65956 0.53116,0.53126 0.99257,1.10609 1.28624,1.78569 0.44445,0.63565 1.40902,-0.0364 0.94667,-0.65956 -0.24301,-0.74231 -0.69323,-1.32054 -1.28625,-1.78569 z m -2.73483,-1.49223 c -0.72218,-0.30138 -1.16808,0.7761 -0.43732,1.05681 l 0.39025,0.14758 c 0.7222,0.30141 1.1681,-0.7761 0.43732,-1.0568 z m -7.60223,1.91562 c -0.52109,0.57678 0.37464,1.33651 0.87855,0.74515 l 0.26685,-0.31654 c 0.52111,-0.57679 -0.37465,-1.33654 -0.87854,-0.74516 z m 1.15912,7.09355 c -0.1906,-0.74845 -1.33363,-0.44917 -1.12109,0.29354 l 0.11543,0.39523 c 0.19062,0.74845 1.33365,0.44917 1.12109,-0.29354 z m -0.68592,-4.36328 c -0.0858,-0.76698 -1.25912,-0.62352 -1.15127,0.14077 -0.065,0.75431 -0.008,1.50847 0.28594,2.26232 0.0859,0.76696 1.25912,0.62352 1.15129,-0.14076 -0.28468,-0.81162 -0.29126,-1.53878 -0.28596,-2.26233 z m 1.97398,-4.7241 c -0.77314,0.13162 -0.55483,1.27463 0.21417,1.12135 0.7762,-0.30633 1.5005,-0.42412 2.18687,-0.40397 0.77313,-0.13163 0.55482,-1.27462 -0.21418,-1.12137 -0.74152,0.0229 -1.4733,0.13255 -2.18686,0.40399 z" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.15052;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.2;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" + id="path4101-2-6-9-1_GP_dotdash" /> </g> <g inkscape:groupmode="layer" diff --git a/release/datafiles/blender_icons16/icon16_mod_dash.dat b/release/datafiles/blender_icons16/icon16_mod_dash.dat Binary files differnew file mode 100644 index 00000000000..a8419db8c16 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_mod_dash.dat diff --git a/release/datafiles/blender_icons16/icon16_mod_length.dat b/release/datafiles/blender_icons16/icon16_mod_length.dat Binary files differnew file mode 100644 index 00000000000..0e1e25fcd71 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_mod_length.dat diff --git a/release/datafiles/blender_icons16/icon16_mod_lineart.dat b/release/datafiles/blender_icons16/icon16_mod_lineart.dat Binary files differnew file mode 100644 index 00000000000..3478b14fdab --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_mod_lineart.dat diff --git a/release/datafiles/blender_icons32/icon32_mod_dash.dat b/release/datafiles/blender_icons32/icon32_mod_dash.dat Binary files differnew file mode 100644 index 00000000000..cca56b0c9de --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_mod_dash.dat diff --git a/release/datafiles/blender_icons32/icon32_mod_length.dat b/release/datafiles/blender_icons32/icon32_mod_length.dat Binary files differnew file mode 100644 index 00000000000..0d1cf1f33aa --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_mod_length.dat diff --git a/release/datafiles/blender_icons32/icon32_mod_lineart.dat b/release/datafiles/blender_icons32/icon32_mod_lineart.dat Binary files differnew file mode 100644 index 00000000000..a8e9c976a9f --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_mod_lineart.dat diff --git a/release/datafiles/userdef/userdef_default.c b/release/datafiles/userdef/userdef_default.c index d51a82c482b..29288dcd8fd 100644 --- a/release/datafiles/userdef/userdef_default.c +++ b/release/datafiles/userdef/userdef_default.c @@ -33,8 +33,8 @@ const UserDef U_default = { .versionfile = BLENDER_FILE_VERSION, .subversionfile = BLENDER_FILE_SUBVERSION, - .flag = (USER_AUTOSAVE | USER_TOOLTIPS | USER_SAVE_PREVIEWS | USER_RELPATHS | - USER_RELEASECONFIRM | USER_SCRIPT_AUTOEXEC_DISABLE | USER_NONEGFRAMES), + .flag = (USER_AUTOSAVE | USER_TOOLTIPS | USER_RELPATHS | USER_RELEASECONFIRM | + USER_SCRIPT_AUTOEXEC_DISABLE | USER_NONEGFRAMES), .dupflag = USER_DUP_MESH | USER_DUP_CURVE | USER_DUP_SURF | USER_DUP_FONT | USER_DUP_MBALL | USER_DUP_LAMP | USER_DUP_ARM | USER_DUP_ACT | USER_DUP_LIGHTPROBE | USER_DUP_GPENCIL, @@ -231,6 +231,7 @@ const UserDef U_default = { .collection_instance_empty_size = 1.0f, .statusbar_flag = STATUSBAR_SHOW_VERSION, + .file_preview_type = USER_FILE_PREVIEW_CAMERA, .runtime = { 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 14fc81821c4..0293d7143ec 100644 --- a/release/scripts/modules/bl_i18n_utils/utils_spell_check.py +++ b/release/scripts/modules/bl_i18n_utils/utils_spell_check.py @@ -48,6 +48,7 @@ class SpellChecker: "equi", # equi-angular, etc. "fader", "globbing", + "gridded", "haptics", "hasn", # hasn't "hetero", @@ -64,12 +65,14 @@ class SpellChecker: "mplayer", "ons", # add-ons "pong", # ping pong + "resumable", "scalable", "shadeless", "shouldn", # shouldn't "smoothen", "spacings", "teleport", "teleporting", + "tangency", "vertices", "wasn", # wasn't @@ -173,11 +176,13 @@ class SpellChecker: "precalculate", "precomputing", "prefetch", + "preload", "premultiply", "premultiplied", "prepass", "prepend", - "preprocess", "preprocessing", "preprocessor", + "preprocess", "preprocessing", "preprocessor", "preprocessed", "preseek", + "preselect", "preselected", "promillage", "pushdown", "raytree", @@ -185,8 +190,10 @@ class SpellChecker: "realtime", "reinject", "reinjected", "rekey", + "relink", "remesh", "reprojection", "reproject", "reprojecting", + "resample", "resize", "restpose", "resync", "resynced", @@ -226,6 +233,7 @@ class SpellChecker: "todo", "tradeoff", "un", + "unadjust", "unadjusted", "unassociate", "unassociated", "unbake", "uncheck", @@ -388,6 +396,7 @@ class SpellChecker: "boid", "boids", "ceil", "compressibility", + "coplanar", "curvilinear", "equiangular", "equisolid", @@ -396,6 +405,7 @@ class SpellChecker: "gettext", "hashable", "hotspot", + "hydrostatic", "interocular", "intrinsics", "irradiance", @@ -495,6 +505,7 @@ class SpellChecker: "perlin", "phong", "pinlight", + "posterize", "qi", "radiosity", "raycast", "raycasting", diff --git a/release/scripts/modules/rna_manual_reference.py b/release/scripts/modules/rna_manual_reference.py index f9756811bde..24b5bb6b685 100644 --- a/release/scripts/modules/rna_manual_reference.py +++ b/release/scripts/modules/rna_manual_reference.py @@ -47,6 +47,7 @@ url_manual_mapping = ( ("bpy.types.fluiddomainsettings.sndparticle_potential_min_wavecrest*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-sndparticle-potential-min-wavecrest"), ("bpy.types.movietrackingsettings.refine_intrinsics_principal_point*", "movie_clip/tracking/clip/toolbar/solve.html#bpy-types-movietrackingsettings-refine-intrinsics-principal-point"), ("bpy.types.cyclesrenderlayersettings.denoising_optix_input_passes*", "render/layers/denoising.html#bpy-types-cyclesrenderlayersettings-denoising-optix-input-passes"), + ("bpy.types.sequencertoolsettings.use_snap_current_frame_to_strips*", "video_editing/sequencer/editing.html#bpy-types-sequencertoolsettings-use-snap-current-frame-to-strips"), ("bpy.types.fluiddomainsettings.sndparticle_potential_max_energy*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-sndparticle-potential-max-energy"), ("bpy.types.fluiddomainsettings.sndparticle_potential_min_energy*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-sndparticle-potential-min-energy"), ("bpy.types.movietrackingsettings.refine_intrinsics_focal_length*", "movie_clip/tracking/clip/toolbar/solve.html#bpy-types-movietrackingsettings-refine-intrinsics-focal-length"), @@ -56,6 +57,7 @@ url_manual_mapping = ( ("bpy.types.fluiddomainsettings.sndparticle_sampling_wavecrest*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-sndparticle-sampling-wavecrest"), ("bpy.types.rigidbodyconstraint.use_override_solver_iterations*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-use-override-solver-iterations"), ("bpy.types.toolsettings.use_transform_correct_face_attributes*", "modeling/meshes/tools/tool_settings.html#bpy-types-toolsettings-use-transform-correct-face-attributes"), + ("bpy.types.rendersettings.use_sequencer_override_scene_strip*", "video_editing/preview/sidebar.html#bpy-types-rendersettings-use-sequencer-override-scene-strip"), ("bpy.types.toolsettings.use_transform_correct_keep_connected*", "modeling/meshes/tools/tool_settings.html#bpy-types-toolsettings-use-transform-correct-keep-connected"), ("bpy.types.fluiddomainsettings.sndparticle_potential_radius*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-sndparticle-potential-radius"), ("bpy.types.fluiddomainsettings.openvdb_cache_compress_type*", "physics/fluid/type/domain/cache.html#bpy-types-fluiddomainsettings-openvdb-cache-compress-type"), @@ -65,6 +67,8 @@ url_manual_mapping = ( ("bpy.types.fluiddomainsettings.vector_scale_with_magnitude*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-vector-scale-with-magnitude"), ("bpy.types.movietrackingstabilization.use_2d_stabilization*", "movie_clip/tracking/clip/sidebar/stabilization/panel.html#bpy-types-movietrackingstabilization-use-2d-stabilization"), ("bpy.types.spacespreadsheet.display_context_path_collapsed*", "editors/spreadsheet.html#bpy-types-spacespreadsheet-display-context-path-collapsed"), + ("bpy.types.toolsettings.annotation_stroke_placement_view2d*", "interface/annotate_tool.html#bpy-types-toolsettings-annotation-stroke-placement-view2d"), + ("bpy.types.toolsettings.annotation_stroke_placement_view3d*", "interface/annotate_tool.html#bpy-types-toolsettings-annotation-stroke-placement-view3d"), ("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"), @@ -85,11 +89,15 @@ 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.sequencertoolsettings.snap_to_current_frame*", "video_editing/sequencer/editing.html#bpy-types-sequencertoolsettings-snap-to-current-frame"), ("bpy.types.colormanageddisplaysettings.display_device*", "render/color_management.html#bpy-types-colormanageddisplaysettings-display-device"), ("bpy.types.colormanagedviewsettings.use_curve_mapping*", "render/color_management.html#bpy-types-colormanagedviewsettings-use-curve-mapping"), ("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.gpencillayer.annotation_onion_before_color*", "interface/annotate_tool.html#bpy-types-gpencillayer-annotation-onion-before-color"), + ("bpy.types.gpencillayer.annotation_onion_before_range*", "interface/annotate_tool.html#bpy-types-gpencillayer-annotation-onion-before-range"), + ("bpy.types.gpencillayer.use_annotation_onion_skinning*", "interface/annotate_tool.html#bpy-types-gpencillayer-use-annotation-onion-skinning"), ("bpy.types.greasepencil.use_adaptive_curve_resolution*", "grease_pencil/modes/edit/curve_editing.html#bpy-types-greasepencil-use-adaptive-curve-resolution"), ("bpy.types.linestylegeometrymodifier_polygonalization*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/polygonization.html#bpy-types-linestylegeometrymodifier-polygonalization"), ("bpy.types.toolsettings.use_gpencil_automerge_strokes*", "grease_pencil/modes/draw/introduction.html#bpy-types-toolsettings-use-gpencil-automerge-strokes"), @@ -102,10 +110,13 @@ url_manual_mapping = ( ("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.gpencillayer.annotation_onion_after_color*", "interface/annotate_tool.html#bpy-types-gpencillayer-annotation-onion-after-color"), + ("bpy.types.gpencillayer.annotation_onion_after_range*", "interface/annotate_tool.html#bpy-types-gpencillayer-annotation-onion-after-range"), ("bpy.types.materialgpencilstyle.use_fill_texture_mix*", "grease_pencil/materials/properties.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.spacesequenceeditor.waveform_display_type*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-waveform-display-type"), + ("bpy.types.sequencertoolsettings.snap_to_hold_offset*", "video_editing/sequencer/editing.html#bpy-types-sequencertoolsettings-snap-to-hold-offset"), + ("bpy.types.spacesequenceeditor.waveform_display_type*", "editors/video_sequencer/sequencer/display.html#bpy-types-spacesequenceeditor-waveform-display-type"), ("bpy.types.toolsettings.use_mesh_automerge_and_split*", "modeling/meshes/tools/tool_settings.html#bpy-types-toolsettings-use-mesh-automerge-and-split"), ("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"), @@ -145,9 +156,11 @@ url_manual_mapping = ( ("bpy.types.materialgpencilstyle.use_stroke_holdout*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-use-stroke-holdout"), ("bpy.types.movietrackingsettings.use_tripod_solver*", "movie_clip/tracking/clip/toolbar/solve.html#bpy-types-movietrackingsettings-use-tripod-solver"), ("bpy.types.rendersettings.use_high_quality_normals*", "render/eevee/render_settings/performance.html#bpy-types-rendersettings-use-high-quality-normals"), + ("bpy.types.sequencertoolsettings.snap_ignore_muted*", "video_editing/sequencer/editing.html#bpy-types-sequencertoolsettings-snap-ignore-muted"), + ("bpy.types.sequencertoolsettings.snap_ignore_sound*", "video_editing/sequencer/editing.html#bpy-types-sequencertoolsettings-snap-ignore-sound"), ("bpy.types.spaceoutliner.use_filter_case_sensitive*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-case-sensitive"), ("bpy.types.spaceoutliner.use_filter_object_content*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-content"), - ("bpy.types.spacesequenceeditor.show_strip_duration*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-duration"), + ("bpy.types.spacesequenceeditor.show_strip_duration*", "editors/video_sequencer/sequencer/display.html#bpy-types-spacesequenceeditor-show-strip-duration"), ("bpy.types.toolsettings.use_proportional_connected*", "editors/3dview/controls/proportional_editing.html#bpy-types-toolsettings-use-proportional-connected"), ("bpy.types.toolsettings.use_proportional_projected*", "editors/3dview/controls/proportional_editing.html#bpy-types-toolsettings-use-proportional-projected"), ("bpy.types.view3doverlay.vertex_paint_mode_opacity*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-vertex-paint-mode-opacity"), @@ -156,6 +169,7 @@ url_manual_mapping = ( ("bpy.ops.gpencil.vertex_color_brightness_contrast*", "grease_pencil/modes/vertex_paint/editing.html#bpy-ops-gpencil-vertex-color-brightness-contrast"), ("bpy.ops.view3d.edit_mesh_extrude_individual_move*", "modeling/meshes/editing/face/extrude_faces.html#bpy-ops-view3d-edit-mesh-extrude-individual-move"), ("bpy.ops.view3d.edit_mesh_extrude_manifold_normal*", "modeling/meshes/tools/extrude_manifold.html#bpy-ops-view3d-edit-mesh-extrude-manifold-normal"), + ("bpy.types.cyclesobjectsettings.use_distance_cull*", "render/cycles/object_settings/object_data.html#bpy-types-cyclesobjectsettings-use-distance-cull"), ("bpy.types.cyclesrendersettings.ao_bounces_render*", "render/cycles/render_settings/light_paths.html#bpy-types-cyclesrendersettings-ao-bounces-render"), ("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"), @@ -180,6 +194,7 @@ url_manual_mapping = ( ("bpy.types.spacedopesheeteditor.show_pose_markers*", "animation/markers.html#bpy-types-spacedopesheeteditor-show-pose-markers"), ("bpy.types.spaceoutliner.use_filter_object_camera*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-camera"), ("bpy.types.spaceoutliner.use_filter_object_others*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-others"), + ("bpy.types.spacesequenceeditor.show_strip_overlay*", "editors/video_sequencer/sequencer/display.html#bpy-types-spacesequenceeditor-show-strip-overlay"), ("bpy.types.toolsettings.proportional_edit_falloff*", "editors/3dview/controls/proportional_editing.html#bpy-types-toolsettings-proportional-edit-falloff"), ("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"), @@ -214,8 +229,8 @@ url_manual_mapping = ( ("bpy.types.spaceoutliner.use_filter_object_empty*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-empty"), ("bpy.types.spaceoutliner.use_filter_object_light*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-light"), ("bpy.types.spacesequenceeditor.proxy_render_size*", "video_editing/preview/sidebar.html#bpy-types-spacesequenceeditor-proxy-render-size"), - ("bpy.types.spacesequenceeditor.show_strip_offset*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-offset"), - ("bpy.types.spacesequenceeditor.show_strip_source*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-source"), + ("bpy.types.spacesequenceeditor.show_strip_offset*", "editors/video_sequencer/sequencer/display.html#bpy-types-spacesequenceeditor-show-strip-offset"), + ("bpy.types.spacesequenceeditor.show_strip_source*", "editors/video_sequencer/sequencer/display.html#bpy-types-spacesequenceeditor-show-strip-source"), ("bpy.types.spacespreadsheetrowfilter.column_name*", "editors/spreadsheet.html#bpy-types-spacespreadsheetrowfilter-column-name"), ("bpy.types.toolsettings.gpencil_stroke_placement*", "grease_pencil/modes/draw/stroke_placement.html#bpy-types-toolsettings-gpencil-stroke-placement"), ("bpy.types.toolsettings.use_keyframe_cycle_aware*", "editors/timeline.html#bpy-types-toolsettings-use-keyframe-cycle-aware"), @@ -223,6 +238,7 @@ url_manual_mapping = ( ("bpy.types.viewlayer.use_pass_cryptomatte_object*", "render/layers/passes.html#bpy-types-viewlayer-use-pass-cryptomatte-object"), ("bpy.ops.armature.rigify_apply_selection_colors*", "addons/rigging/rigify/metarigs.html#bpy-ops-armature-rigify-apply-selection-colors"), ("bpy.types.brushgpencilsettings.fill_layer_mode*", "grease_pencil/modes/draw/tools/fill.html#bpy-types-brushgpencilsettings-fill-layer-mode"), + ("bpy.types.cyclesobjectsettings.use_camera_cull*", "render/cycles/object_settings/object_data.html#bpy-types-cyclesobjectsettings-use-camera-cull"), ("bpy.types.cyclesrendersettings.use_camera_cull*", "render/cycles/render_settings/simplify.html#bpy-types-cyclesrendersettings-use-camera-cull"), ("bpy.types.editbone.bbone_handle_use_ease_start*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-handle-use-ease-start"), ("bpy.types.fluiddomainsettings.color_ramp_field*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-color-ramp-field"), @@ -232,7 +248,7 @@ url_manual_mapping = ( ("bpy.types.linestylegeometrymodifier_tipremover*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/tip_remover.html#bpy-types-linestylegeometrymodifier-tipremover"), ("bpy.types.movieclipuser.use_render_undistorted*", "editors/clip/display/clip_display.html#bpy-types-movieclipuser-use-render-undistorted"), ("bpy.types.movietrackingcamera.distortion_model*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-distortion-model"), - ("bpy.types.rendersettings.resolution_percentage*", "render/output/properties/dimensions.html#bpy-types-rendersettings-resolution-percentage"), + ("bpy.types.rendersettings.resolution_percentage*", "render/output/properties/format.html#bpy-types-rendersettings-resolution-percentage"), ("bpy.types.rendersettings_simplify_gpencil_tint*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-simplify-gpencil-tint"), ("bpy.types.spaceoutliner.use_filter_object_mesh*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-mesh"), ("bpy.types.spaceoutliner.use_filter_view_layers*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-view-layers"), @@ -267,6 +283,7 @@ url_manual_mapping = ( ("bpy.types.linestylegeometrymodifier_blueprint*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/blueprint.html#bpy-types-linestylegeometrymodifier-blueprint"), ("bpy.types.materialgpencilstyle.alignment_mode*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-alignment-mode"), ("bpy.types.particlesettings.use_modifier_stack*", "physics/particles/emitter/emission.html#bpy-types-particlesettings-use-modifier-stack"), + ("bpy.types.rendersettings.sequencer_gl_preview*", "video_editing/preview/sidebar.html#bpy-types-rendersettings-sequencer-gl-preview"), ("bpy.types.rendersettings.simplify_subdivision*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-simplify-subdivision"), ("bpy.types.spacegrapheditor.show_extrapolation*", "editors/graph_editor/introduction.html#bpy-types-spacegrapheditor-show-extrapolation"), ("bpy.types.spaceoutliner.use_filter_collection*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-collection"), @@ -274,7 +291,7 @@ url_manual_mapping = ( ("bpy.types.spacesequenceeditor.show_annotation*", "video_editing/preview/introduction.html#bpy-types-spacesequenceeditor-show-annotation"), ("bpy.types.spacesequenceeditor.show_region_hud*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-region-hud"), ("bpy.types.spacesequenceeditor.show_safe_areas*", "video_editing/preview/introduction.html#bpy-types-spacesequenceeditor-show-safe-areas"), - ("bpy.types.spacesequenceeditor.show_strip_name*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-name"), + ("bpy.types.spacesequenceeditor.show_strip_name*", "editors/video_sequencer/sequencer/display.html#bpy-types-spacesequenceeditor-show-strip-name"), ("bpy.types.spacespreadsheet.show_only_selected*", "editors/spreadsheet.html#bpy-types-spacespreadsheet-show-only-selected"), ("bpy.types.spacespreadsheetrowfilter.operation*", "editors/spreadsheet.html#bpy-types-spacespreadsheetrowfilter-operation"), ("bpy.types.spacespreadsheetrowfilter.threshold*", "editors/spreadsheet.html#bpy-types-spacespreadsheetrowfilter-threshold"), @@ -313,6 +330,7 @@ url_manual_mapping = ( ("bpy.types.linestylegeometrymodifier_sampling*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/sampling.html#bpy-types-linestylegeometrymodifier-sampling"), ("bpy.types.nodesocketinterface*.default_value*", "interface/controls/nodes/groups.html#bpy-types-nodesocketinterface-default-value"), ("bpy.types.rendersettings.use_persistent_data*", "render/cycles/render_settings/performance.html#bpy-types-rendersettings-use-persistent-data"), + ("bpy.types.sequencertoolsettings.overlap_mode*", "video_editing/sequencer/editing.html#bpy-types-sequencertoolsettings-overlap-mode"), ("bpy.types.spaceclipeditor.show_green_channel*", "editors/clip/display/clip_display.html#bpy-types-spaceclipeditor-show-green-channel"), ("bpy.types.spaceoutliner.show_restrict_column*", "editors/outliner/interface.html#bpy-types-spaceoutliner-show-restrict-column"), ("bpy.types.spacespreadsheet.object_eval_state*", "editors/spreadsheet.html#bpy-types-spacespreadsheet-object-eval-state"), @@ -339,10 +357,10 @@ url_manual_mapping = ( ("bpy.types.materialgpencilstyle.stroke_style*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-stroke-style"), ("bpy.types.objectlineart.use_crease_override*", "scene_layout/object/properties/line_art.html#bpy-types-objectlineart-use-crease-override"), ("bpy.types.rendersettings.preview_pixel_size*", "render/cycles/render_settings/performance.html#bpy-types-rendersettings-preview-pixel-size"), - ("bpy.types.rendersettings.use_crop_to_border*", "render/output/properties/dimensions.html#bpy-types-rendersettings-use-crop-to-border"), + ("bpy.types.rendersettings.use_crop_to_border*", "render/output/properties/format.html#bpy-types-rendersettings-use-crop-to-border"), ("bpy.types.rendersettings.use_file_extension*", "render/output/properties/output.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.spaceclipeditor.annotation_source*", "movie_clip/tracking/clip/sidebar/annotation.html#bpy-types-spaceclipeditor-annotation-source"), + ("bpy.types.spaceclipeditor.annotation_source*", "movie_clip/tracking/clip/sidebar/view.html#bpy-types-spaceclipeditor-annotation-source"), ("bpy.types.spaceclipeditor.show_blue_channel*", "editors/clip/display/clip_display.html#bpy-types-spaceclipeditor-show-blue-channel"), ("bpy.types.spaceoutliner.use_filter_children*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-children"), ("bpy.types.spaceoutliner.use_filter_complete*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-complete"), @@ -388,7 +406,7 @@ url_manual_mapping = ( ("bpy.types.spaceclipeditor.show_red_channel*", "editors/clip/display/clip_display.html#bpy-types-spaceclipeditor-show-red-channel"), ("bpy.types.spaceclipeditor.use_mute_footage*", "editors/clip/display/clip_display.html#bpy-types-spaceclipeditor-use-mute-footage"), ("bpy.types.spacesequenceeditor.overlay_type*", "video_editing/preview/sidebar.html#bpy-types-spacesequenceeditor-overlay-type"), - ("bpy.types.spacesequenceeditor.show_fcurves*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-fcurves"), + ("bpy.types.spacesequenceeditor.show_fcurves*", "editors/video_sequencer/sequencer/display.html#bpy-types-spacesequenceeditor-show-fcurves"), ("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.types.view3doverlay.show_fade_inactive*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-show-fade-inactive"), @@ -396,6 +414,7 @@ url_manual_mapping = ( ("bpy.ops.clip.stabilize_2d_rotation_select*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-stabilize-2d-rotation-select"), ("bpy.ops.constraint.disable_keep_transform*", "animation/constraints/interface/common.html#bpy-ops-constraint-disable-keep-transform"), ("bpy.ops.gpencil.stroke_reset_vertex_color*", "grease_pencil/modes/vertex_paint/editing.html#bpy-ops-gpencil-stroke-reset-vertex-color"), + ("bpy.ops.object.modifier_apply_as_shapekey*", "modeling/modifiers/introduction.html#bpy-ops-object-modifier-apply-as-shapekey"), ("bpy.ops.object.vertex_group_normalize_all*", "sculpt_paint/weight_paint/editing.html#bpy-ops-object-vertex-group-normalize-all"), ("bpy.ops.outliner.collection_color_tag_set*", "editors/outliner/editing.html#bpy-ops-outliner-collection-color-tag-set"), ("bpy.ops.outliner.collection_enable_render*", "editors/outliner/editing.html#bpy-ops-outliner-collection-enable-render"), @@ -417,6 +436,7 @@ url_manual_mapping = ( ("bpy.types.fluidflowsettings.flow_behavior*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-flow-behavior"), ("bpy.types.fluidflowsettings.noise_texture*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-noise-texture"), ("bpy.types.geometrynodeattributevectormath*", "modeling/geometry_nodes/attribute/attribute_vector_math.html#bpy-types-geometrynodeattributevectormath"), + ("bpy.types.gpencillayer.annotation_opacity*", "interface/annotate_tool.html#bpy-types-gpencillayer-annotation-opacity"), ("bpy.types.gpencillayer.use_onion_skinning*", "grease_pencil/properties/layers.html#bpy-types-gpencillayer-use-onion-skinning"), ("bpy.types.gpencilsculptguide.use_snapping*", "grease_pencil/modes/draw/guides.html#bpy-types-gpencilsculptguide-use-snapping"), ("bpy.types.gpencilsculptsettings.lock_axis*", "grease_pencil/modes/draw/drawing_planes.html#bpy-types-gpencilsculptsettings-lock-axis"), @@ -443,6 +463,7 @@ url_manual_mapping = ( ("bpy.types.toolsettings.gpencil_selectmode*", "grease_pencil/selecting.html#bpy-types-toolsettings-gpencil-selectmode"), ("bpy.types.toolsettings.use_auto_normalize*", "sculpt_paint/weight_paint/tool_settings/options.html#bpy-types-toolsettings-use-auto-normalize"), ("bpy.types.toolsettings.use_mesh_automerge*", "modeling/meshes/tools/tool_settings.html#bpy-types-toolsettings-use-mesh-automerge"), + ("bpy.types.toolsettings.use_snap_sequencer*", "video_editing/sequencer/editing.html#bpy-types-toolsettings-use-snap-sequencer"), ("bpy.types.toolsettings.use_snap_translate*", "editors/3dview/controls/snapping.html#bpy-types-toolsettings-use-snap-translate"), ("bpy.types.toolsettings.use_uv_select_sync*", "editors/uv/selecting.html#bpy-types-toolsettings-use-uv-select-sync"), ("bpy.types.view3doverlay.wireframe_opacity*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-wireframe-opacity"), @@ -469,7 +490,6 @@ url_manual_mapping = ( ("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"), - ("bpy.types.fluiddomainsettings.noise_type*", "physics/fluid/type/domain/gas/noise.html#bpy-types-fluiddomainsettings-noise-type"), ("bpy.types.fluiddomainsettings.slice_axis*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-slice-axis"), ("bpy.types.fluiddomainsettings.time_scale*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-time-scale"), ("bpy.types.fluidflowsettings.texture_size*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-texture-size"), @@ -534,7 +554,7 @@ url_manual_mapping = ( ("bpy.types.fluidflowsettings.smoke_color*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-smoke-color"), ("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/sidebar/modifiers.html#bpy-types-fmodifierenvelopecontrolpoint"), + ("bpy.types.fmodifierenvelopecontrolpoint*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifierenvelopecontrolpoint"), ("bpy.types.geometrynodeattributecurvemap*", "modeling/geometry_nodes/attribute/attribute_curve_map.html#bpy-types-geometrynodeattributecurvemap"), ("bpy.types.geometrynodeattributemaprange*", "modeling/geometry_nodes/attribute/attribute_map_range.html#bpy-types-geometrynodeattributemaprange"), ("bpy.types.geometrynodeattributetransfer*", "modeling/geometry_nodes/attribute/attribute_transfer.html#bpy-types-geometrynodeattributetransfer"), @@ -543,13 +563,15 @@ url_manual_mapping = ( ("bpy.types.material.use_sss_translucency*", "render/eevee/materials/settings.html#bpy-types-material-use-sss-translucency"), ("bpy.types.movietrackingcamera.principal*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-principal"), ("bpy.types.object.use_camera_lock_parent*", "scene_layout/object/properties/relations.html#bpy-types-object-use-camera-lock-parent"), - ("bpy.types.rendersettings.pixel_aspect_x*", "render/output/properties/dimensions.html#bpy-types-rendersettings-pixel-aspect-x"), - ("bpy.types.rendersettings.pixel_aspect_y*", "render/output/properties/dimensions.html#bpy-types-rendersettings-pixel-aspect-y"), + ("bpy.types.object.visible_volume_scatter*", "render/cycles/object_settings/object_data.html#bpy-types-object-visible-volume-scatter"), + ("bpy.types.rendersettings.pixel_aspect_x*", "render/output/properties/format.html#bpy-types-rendersettings-pixel-aspect-x"), + ("bpy.types.rendersettings.pixel_aspect_y*", "render/output/properties/format.html#bpy-types-rendersettings-pixel-aspect-y"), ("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"), ("bpy.types.spaceoutliner.use_sync_select*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-sync-select"), ("bpy.types.spaceproperties.outliner_sync*", "editors/properties_editor.html#bpy-types-spaceproperties-outliner-sync"), ("bpy.types.spaceproperties.search_filter*", "editors/properties_editor.html#bpy-types-spaceproperties-search-filter"), + ("bpy.types.spacesequenceeditor.view_type*", "editors/video_sequencer/introduction.html#bpy-types-spacesequenceeditor-view-type"), ("bpy.types.spacetexteditor.margin_column*", "editors/text_editor.html#bpy-types-spacetexteditor-margin-column"), ("bpy.types.spacetexteditor.use_find_wrap*", "editors/text_editor.html#bpy-types-spacetexteditor-use-find-wrap"), ("bpy.types.spaceuveditor.pixel_snap_mode*", "modeling/meshes/uv/editing.html#bpy-types-spaceuveditor-pixel-snap-mode"), @@ -586,9 +608,10 @@ url_manual_mapping = ( ("bpy.types.material.preview_render_type*", "render/materials/preview.html#bpy-types-material-preview-render-type"), ("bpy.types.materialgpencilstyle.pattern*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-pattern"), ("bpy.types.materialgpencilstyle.texture*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-texture"), + ("bpy.types.modifier.use_apply_on_spline*", "modeling/modifiers/introduction.html#bpy-types-modifier-use-apply-on-spline"), ("bpy.types.object.use_empty_image_alpha*", "modeling/empties.html#bpy-types-object-use-empty-image-alpha"), - ("bpy.types.rendersettings.frame_map_new*", "render/output/properties/dimensions.html#bpy-types-rendersettings-frame-map-new"), - ("bpy.types.rendersettings.frame_map_old*", "render/output/properties/dimensions.html#bpy-types-rendersettings-frame-map-old"), + ("bpy.types.rendersettings.frame_map_new*", "render/output/properties/frame_range.html#bpy-types-rendersettings-frame-map-new"), + ("bpy.types.rendersettings.frame_map_old*", "render/output/properties/frame_range.html#bpy-types-rendersettings-frame-map-old"), ("bpy.types.rendersettings.use_overwrite*", "render/output/properties/output.html#bpy-types-rendersettings-use-overwrite"), ("bpy.types.rendersettings.use_sequencer*", "render/output/properties/post_processing.html#bpy-types-rendersettings-use-sequencer"), ("bpy.types.sceneeevee.volumetric_shadow*", "render/eevee/render_settings/volumetrics.html#bpy-types-sceneeevee-volumetric-shadow"), @@ -613,6 +636,7 @@ url_manual_mapping = ( ("bpy.ops.mesh.primitive_ico_sphere_add*", "modeling/meshes/primitives.html#bpy-ops-mesh-primitive-ico-sphere-add"), ("bpy.ops.object.gpencil_modifier_apply*", "grease_pencil/modifiers/introduction.html#bpy-ops-object-gpencil-modifier-apply"), ("bpy.ops.object.material_slot_deselect*", "render/materials/assignment.html#bpy-ops-object-material-slot-deselect"), + ("bpy.ops.object.modifier_move_to_index*", "modeling/modifiers/introduction.html#bpy-ops-object-modifier-move-to-index"), ("bpy.ops.object.multires_external_save*", "modeling/modifiers/generate/multiresolution.html#bpy-ops-object-multires-external-save"), ("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"), @@ -645,11 +669,12 @@ url_manual_mapping = ( ("bpy.types.linestyle*modifier_material*", "render/freestyle/parameter_editor/line_style/modifiers/color/material.html#bpy-types-linestyle-modifier-material"), ("bpy.types.movietrackingcamera.brown_k*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-brown-k"), ("bpy.types.movietrackingcamera.brown_p*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-brown-p"), + ("bpy.types.object.visible_transmission*", "render/cycles/object_settings/object_data.html#bpy-types-object-visible-transmission"), ("bpy.types.particlesettingstextureslot*", "physics/particles/texture_influence.html#bpy-types-particlesettingstextureslot"), ("bpy.types.posebone.ik_rotation_weight*", "animation/armatures/posing/bone_constraints/inverse_kinematics/introduction.html#bpy-types-posebone-ik-rotation-weight"), ("bpy.types.regionview3d.show_sync_view*", "editors/3dview/navigate/views.html#bpy-types-regionview3d-show-sync-view"), - ("bpy.types.rendersettings.resolution_x*", "render/output/properties/dimensions.html#bpy-types-rendersettings-resolution-x"), - ("bpy.types.rendersettings.resolution_y*", "render/output/properties/dimensions.html#bpy-types-rendersettings-resolution-y"), + ("bpy.types.rendersettings.resolution_x*", "render/output/properties/format.html#bpy-types-rendersettings-resolution-x"), + ("bpy.types.rendersettings.resolution_y*", "render/output/properties/format.html#bpy-types-rendersettings-resolution-y"), ("bpy.types.rendersettings.threads_mode*", "render/cycles/render_settings/performance.html#bpy-types-rendersettings-threads-mode"), ("bpy.types.rigidbodyconstraint.enabled*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-enabled"), ("bpy.types.rigidbodyconstraint.object1*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-object1"), @@ -700,7 +725,7 @@ url_manual_mapping = ( ("bpy.types.compositornodekeyingscreen*", "compositing/types/matte/keying_screen.html#bpy-types-compositornodekeyingscreen"), ("bpy.types.dynamicpaintcanvassettings*", "physics/dynamic_paint/canvas.html#bpy-types-dynamicpaintcanvassettings"), ("bpy.types.fluidflowsettings.use_flow*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-use-flow"), - ("bpy.types.fmodifierfunctiongenerator*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifierfunctiongenerator"), + ("bpy.types.fmodifierfunctiongenerator*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifierfunctiongenerator"), ("bpy.types.geometrynodeattributeclamp*", "modeling/geometry_nodes/attribute/attribute_clamp.html#bpy-types-geometrynodeattributeclamp"), ("bpy.types.geometrynodecollectioninfo*", "modeling/geometry_nodes/input/collection_info.html#bpy-types-geometrynodecollectioninfo"), ("bpy.types.geometrynodecurveendpoints*", "modeling/geometry_nodes/curve/curve_endpoints.html#bpy-types-geometrynodecurveendpoints"), @@ -710,6 +735,7 @@ url_manual_mapping = ( ("bpy.types.geometrynodepointstovolume*", "modeling/geometry_nodes/volume/points_to_volume.html#bpy-types-geometrynodepointstovolume"), ("bpy.types.geometrynodepointtranslate*", "modeling/geometry_nodes/point/point_translate.html#bpy-types-geometrynodepointtranslate"), ("bpy.types.greasepencil.use_multiedit*", "grease_pencil/multiframe.html#bpy-types-greasepencil-use-multiedit"), + ("bpy.types.keyframe.handle_right_type*", "editors/graph_editor/fcurves/properties.html#bpy-types-keyframe-handle-right-type"), ("bpy.types.materialgpencilstyle.color*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-color"), ("bpy.types.movietrackingcamera.nuke_k*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-nuke-k"), ("bpy.types.movietrackingstabilization*", "movie_clip/tracking/clip/sidebar/stabilization/index.html#bpy-types-movietrackingstabilization"), @@ -728,6 +754,7 @@ url_manual_mapping = ( ("bpy.types.toolsettings.use_snap_self*", "editors/3dview/controls/snapping.html#bpy-types-toolsettings-use-snap-self"), ("bpy.types.viewlayer.active_aov_index*", "render/layers/passes.html#bpy-types-viewlayer-active-aov-index"), ("bpy.ops.anim.channels_enable_toggle*", "editors/graph_editor/channels.html#bpy-ops-anim-channels-enable-toggle"), + ("bpy.ops.constraint.copy_to_selected*", "animation/constraints/interface/header.html#bpy-ops-constraint-copy-to-selected"), ("bpy.ops.gpencil.bake_mesh_animation*", "grease_pencil/animation/tools.html#bpy-ops-gpencil-bake-mesh-animation"), ("bpy.ops.gpencil.select_vertex_color*", "grease_pencil/selecting.html#bpy-ops-gpencil-select-vertex-color"), ("bpy.ops.gpencil.set_active_material*", "grease_pencil/modes/edit/stroke_menu.html#bpy-ops-gpencil-set-active-material"), @@ -778,13 +805,15 @@ url_manual_mapping = ( ("bpy.types.geometrynodepointinstance*", "modeling/geometry_nodes/point/point_instance.html#bpy-types-geometrynodepointinstance"), ("bpy.types.geometrynodepointseparate*", "modeling/geometry_nodes/point/point_separate.html#bpy-types-geometrynodepointseparate"), ("bpy.types.geometrynoderesamplecurve*", "modeling/geometry_nodes/curve/resample_curve.html#bpy-types-geometrynoderesamplecurve"), + ("bpy.types.keyframe.handle_left_type*", "editors/graph_editor/fcurves/properties.html#bpy-types-keyframe-handle-left-type"), ("bpy.types.light.use_custom_distance*", "render/eevee/lighting.html#bpy-types-light-use-custom-distance"), ("bpy.types.materialgpencilstyle.flip*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-flip"), ("bpy.types.materialgpencilstyle.mode*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-mode"), + ("bpy.types.modifier.show_in_editmode*", "modeling/modifiers/introduction.html#bpy-types-modifier-show-in-editmode"), ("bpy.types.object.empty_display_size*", "modeling/empties.html#bpy-types-object-empty-display-size"), ("bpy.types.object.empty_display_type*", "modeling/empties.html#bpy-types-object-empty-display-type"), ("bpy.types.regionview3d.use_box_clip*", "editors/3dview/navigate/views.html#bpy-types-regionview3d-use-box-clip"), - ("bpy.types.rendersettings.use_border*", "render/output/properties/dimensions.html#bpy-types-rendersettings-use-border"), + ("bpy.types.rendersettings.use_border*", "render/output/properties/format.html#bpy-types-rendersettings-use-border"), ("bpy.types.rigidbodyconstraint.limit*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-limit"), ("bpy.types.rigidbodyobject.kinematic*", "physics/rigid_body/properties/settings.html#bpy-types-rigidbodyobject-kinematic"), ("bpy.types.scene.audio_doppler_speed*", "scene_layout/scene/properties.html#bpy-types-scene-audio-doppler-speed"), @@ -848,7 +877,6 @@ url_manual_mapping = ( ("bpy.types.copytransformsconstraint*", "animation/constraints/transform/copy_transforms.html#bpy-types-copytransformsconstraint"), ("bpy.types.correctivesmoothmodifier*", "modeling/modifiers/deform/corrective_smooth.html#bpy-types-correctivesmoothmodifier"), ("bpy.types.curve.bevel_factor_start*", "modeling/curves/properties/geometry.html#bpy-types-curve-bevel-factor-start"), - ("bpy.types.cyclesvisibilitysettings*", "render/cycles/object_settings/object_data.html#bpy-types-cyclesvisibilitysettings"), ("bpy.types.fluiddomainsettings.beta*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-beta"), ("bpy.types.fluidmodifier.fluid_type*", "physics/fluid/type/index.html#bpy-types-fluidmodifier-fluid-type"), ("bpy.types.functionnodefloatcompare*", "modeling/geometry_nodes/utilities/float_compare.html#bpy-types-functionnodefloatcompare"), @@ -865,6 +893,7 @@ url_manual_mapping = ( ("bpy.types.mesh.use_mirror_topology*", "modeling/meshes/tools/tool_settings.html#bpy-types-mesh-use-mirror-topology"), ("bpy.types.movieclip.display_aspect*", "editors/clip/display/clip_display.html#bpy-types-movieclip-display-aspect"), ("bpy.types.nodesocketinterface.name*", "interface/controls/nodes/groups.html#bpy-types-nodesocketinterface-name"), + ("bpy.types.object.is_shadow_catcher*", "render/cycles/object_settings/object_data.html#bpy-types-object-is-shadow-catcher"), ("bpy.types.particleinstancemodifier*", "modeling/modifiers/physics/particle_instance.html#bpy-types-particleinstancemodifier"), ("bpy.types.sequencetransform.offset*", "video_editing/sequencer/sidebar/strip.html#bpy-types-sequencetransform-offset"), ("bpy.types.shadernodebrightcontrast*", "render/shader_nodes/color/bright_contrast.html#bpy-types-shadernodebrightcontrast"), @@ -955,7 +984,7 @@ url_manual_mapping = ( ("bpy.types.limitrotationconstraint*", "animation/constraints/transform/limit_rotation.html#bpy-types-limitrotationconstraint"), ("bpy.types.multiplygpencilmodifier*", "grease_pencil/modifiers/generate/multiple_strokes.html#bpy-types-multiplygpencilmodifier"), ("bpy.types.rendersettings.filepath*", "render/output/properties/output.html#bpy-types-rendersettings-filepath"), - ("bpy.types.rendersettings.fps_base*", "render/output/properties/dimensions.html#bpy-types-rendersettings-fps-base"), + ("bpy.types.rendersettings.fps_base*", "render/output/properties/format.html#bpy-types-rendersettings-fps-base"), ("bpy.types.rigidbodyobject.enabled*", "physics/rigid_body/properties/settings.html#bpy-types-rigidbodyobject-enabled"), ("bpy.types.sceneeevee.use_overscan*", "render/eevee/render_settings/film.html#bpy-types-sceneeevee-use-overscan"), ("bpy.types.sequencetransform.scale*", "video_editing/sequencer/sidebar/strip.html#bpy-types-sequencetransform-scale"), @@ -965,13 +994,13 @@ url_manual_mapping = ( ("bpy.types.shadernodevolumescatter*", "render/shader_nodes/shader/volume_scatter.html#bpy-types-shadernodevolumescatter"), ("bpy.types.simplifygpencilmodifier*", "grease_pencil/modifiers/generate/simplify.html#bpy-types-simplifygpencilmodifier"), ("bpy.types.spacegrapheditor.cursor*", "editors/graph_editor/introduction.html#bpy-types-spacegrapheditor-cursor"), - ("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.armature.select_linked()*", "animation/armatures/bones/selecting.html#bpy-ops-armature-select-linked"), ("bpy.ops.clip.stabilize_2d_select*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-stabilize-2d-select"), + ("bpy.ops.constraint.move_to_index*", "animation/constraints/interface/header.html#bpy-ops-constraint-move-to-index"), ("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.gpencil.vertex_color_hsv*", "grease_pencil/modes/vertex_paint/editing.html#bpy-ops-gpencil-vertex-color-hsv"), @@ -994,7 +1023,7 @@ url_manual_mapping = ( ("bpy.ops.outliner.collection_hide*", "editors/outliner/editing.html#bpy-ops-outliner-collection-hide"), ("bpy.ops.outliner.collection_show*", "editors/outliner/editing.html#bpy-ops-outliner-collection-show"), ("bpy.ops.paint.mask_lasso_gesture*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-paint-mask-lasso-gesture"), - ("bpy.ops.rigidbody.mass_calculate*", "physics/rigid_body/editing.html#bpy-ops-rigidbody-mass-calculate"), + ("bpy.ops.rigidbody.mass_calculate*", "scene_layout/object/editing/rigid_body.html#bpy-ops-rigidbody-mass-calculate"), ("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"), @@ -1045,9 +1074,12 @@ url_manual_mapping = ( ("bpy.types.geometrynodepointscale*", "modeling/geometry_nodes/point/point_scale.html#bpy-types-geometrynodepointscale"), ("bpy.types.imagepaint.use_occlude*", "sculpt_paint/texture_paint/tool_settings/options.html#bpy-types-imagepaint-use-occlude"), ("bpy.types.imagesequence.use_flip*", "video_editing/sequencer/sidebar/strip.html#bpy-types-imagesequence-use-flip"), + ("bpy.types.keyframe.interpolation*", "editors/graph_editor/fcurves/properties.html#bpy-types-keyframe-interpolation"), ("bpy.types.latticegpencilmodifier*", "grease_pencil/modifiers/deform/lattice.html#bpy-types-latticegpencilmodifier"), ("bpy.types.lineartgpencilmodifier*", "grease_pencil/modifiers/generate/line_art.html#bpy-types-lineartgpencilmodifier"), ("bpy.types.mesh.auto_smooth_angle*", "modeling/meshes/structure.html#bpy-types-mesh-auto-smooth-angle"), + ("bpy.types.modifier.show_viewport*", "modeling/modifiers/introduction.html#bpy-types-modifier-show-viewport"), + ("bpy.types.object.visible_diffuse*", "render/cycles/object_settings/object_data.html#bpy-types-object-visible-diffuse"), ("bpy.types.objectsolverconstraint*", "animation/constraints/motion_tracking/object_solver.html#bpy-types-objectsolverconstraint"), ("bpy.types.opacitygpencilmodifier*", "grease_pencil/modifiers/color/opacity.html#bpy-types-opacitygpencilmodifier"), ("bpy.types.particlesystemmodifier*", "physics/particles/index.html#bpy-types-particlesystemmodifier"), @@ -1143,6 +1175,7 @@ url_manual_mapping = ( ("bpy.types.dopesheet.filter_text*", "editors/graph_editor/channels.html#bpy-types-dopesheet-filter-text"), ("bpy.types.editbone.bbone_easein*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-easein"), ("bpy.types.editbone.bbone_rollin*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-rollin"), + ("bpy.types.fcurve.auto_smoothing*", "editors/graph_editor/fcurves/properties.html#bpy-types-fcurve-auto-smoothing"), ("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.geometrynodecurveline*", "modeling/geometry_nodes/curve_primitives/line.html#bpy-types-geometrynodecurveline"), @@ -1151,12 +1184,17 @@ url_manual_mapping = ( ("bpy.types.geometrynodeedgesplit*", "modeling/geometry_nodes/mesh/edge_split.html#bpy-types-geometrynodeedgesplit"), ("bpy.types.geometrynodetransform*", "modeling/geometry_nodes/geometry/transform.html#bpy-types-geometrynodetransform"), ("bpy.types.gpencilsculptsettings*", "grease_pencil/properties/index.html#bpy-types-gpencilsculptsettings"), + ("bpy.types.keyframe.handle_right*", "editors/graph_editor/fcurves/properties.html#bpy-types-keyframe-handle-right"), ("bpy.types.light.cutoff_distance*", "render/eevee/lighting.html#bpy-types-light-cutoff-distance"), ("bpy.types.lockedtrackconstraint*", "animation/constraints/tracking/locked_track.html#bpy-types-lockedtrackconstraint"), ("bpy.types.material.blend_method*", "render/eevee/materials/settings.html#bpy-types-material-blend-method"), ("bpy.types.mirrorgpencilmodifier*", "grease_pencil/modifiers/generate/mirror.html#bpy-types-mirrorgpencilmodifier"), + ("bpy.types.modifier.show_on_cage*", "modeling/modifiers/introduction.html#bpy-types-modifier-show-on-cage"), ("bpy.types.movietrackingcamera.k*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-k"), ("bpy.types.node.use_custom_color*", "interface/controls/nodes/sidebar.html#bpy-types-node-use-custom-color"), + ("bpy.types.object.visible_camera*", "render/cycles/object_settings/object_data.html#bpy-types-object-visible-camera"), + ("bpy.types.object.visible_glossy*", "render/cycles/object_settings/object_data.html#bpy-types-object-visible-glossy"), + ("bpy.types.object.visible_shadow*", "render/cycles/object_settings/object_data.html#bpy-types-object-visible-shadow"), ("bpy.types.offsetgpencilmodifier*", "grease_pencil/modifiers/deform/offset.html#bpy-types-offsetgpencilmodifier"), ("bpy.types.posebone.custom_shape*", "animation/armatures/bones/properties/display.html#bpy-types-posebone-custom-shape"), ("bpy.types.rendersettings.tile_x*", "render/cycles/render_settings/performance.html#bpy-types-rendersettings-tile-x"), @@ -1192,6 +1230,7 @@ url_manual_mapping = ( ("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.make_links_data*", "scene_layout/object/editing/link_transfer/link_data.html#bpy-ops-object-make-links-data"), + ("bpy.ops.object.modifier_remove*", "modeling/modifiers/introduction.html#bpy-ops-object-modifier-remove"), ("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/link_append.html#bpy-ops-outliner-lib-operation"), @@ -1232,11 +1271,13 @@ url_manual_mapping = ( ("bpy.types.geometrynodemeshline*", "modeling/geometry_nodes/mesh_primitives/line.html#bpy-types-geometrynodemeshline"), ("bpy.types.gpencillayer.opacity*", "grease_pencil/properties/layers.html#bpy-types-gpencillayer-opacity"), ("bpy.types.image.display_aspect*", "editors/image/sidebar.html#bpy-types-image-display-aspect"), + ("bpy.types.keyframe.handle_left*", "editors/graph_editor/fcurves/properties.html#bpy-types-keyframe-handle-left"), ("bpy.types.keyingsetsall.active*", "editors/timeline.html#bpy-types-keyingsetsall-active"), ("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.meshtovolumemodifier*", "modeling/modifiers/generate/mesh_to_volume.html#bpy-types-meshtovolumemodifier"), + ("bpy.types.modifier.show_render*", "modeling/modifiers/introduction.html#bpy-types-modifier-show-render"), ("bpy.types.noisegpencilmodifier*", "grease_pencil/modifiers/deform/noise.html#bpy-types-noisegpencilmodifier"), ("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"), @@ -1291,6 +1332,7 @@ url_manual_mapping = ( ("bpy.ops.node.tree_socket_move*", "interface/controls/nodes/groups.html#bpy-ops-node-tree-socket-move"), ("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.modifier_apply*", "modeling/modifiers/introduction.html#bpy-ops-object-modifier-apply"), ("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"), @@ -1402,6 +1444,7 @@ url_manual_mapping = ( ("bpy.ops.node.read_viewlayers*", "interface/controls/nodes/editing.html#bpy-ops-node-read-viewlayers"), ("bpy.ops.node.tree_socket_add*", "interface/controls/nodes/groups.html#bpy-ops-node-tree-socket-add"), ("bpy.ops.object.data_transfer*", "scene_layout/object/editing/link_transfer/transfer_mesh_data.html#bpy-ops-object-data-transfer"), + ("bpy.ops.object.modifier_copy*", "modeling/modifiers/introduction.html#bpy-ops-object-modifier-copy"), ("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"), @@ -1436,13 +1479,15 @@ url_manual_mapping = ( ("bpy.types.compositornodemask*", "compositing/types/input/mask.html#bpy-types-compositornodemask"), ("bpy.types.compositornodemath*", "compositing/types/converter/math.html#bpy-types-compositornodemath"), ("bpy.types.compositornodetime*", "compositing/types/input/time.html#bpy-types-compositornodetime"), + ("bpy.types.constraint.enabled*", "animation/constraints/interface/header.html#bpy-types-constraint-enabled"), ("bpy.types.curve.bevel_object*", "modeling/curves/properties/geometry.html#bpy-types-curve-bevel-object"), ("bpy.types.curve.resolution_u*", "modeling/curves/properties/shape.html#bpy-types-curve-resolution-u"), ("bpy.types.curve.resolution_v*", "modeling/surfaces/properties/shape.html#bpy-types-curve-resolution-v"), ("bpy.types.curve.taper_object*", "modeling/curves/properties/geometry.html#bpy-types-curve-taper-object"), ("bpy.types.curve.twist_smooth*", "modeling/curves/properties/shape.html#bpy-types-curve-twist-smooth"), ("bpy.types.curvepaintsettings*", "modeling/curves/tools/draw.html#bpy-types-curvepaintsettings"), - ("bpy.types.fmodifiergenerator*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifiergenerator"), + ("bpy.types.fcurve.array_index*", "editors/graph_editor/fcurves/properties.html#bpy-types-fcurve-array-index"), + ("bpy.types.fmodifiergenerator*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifiergenerator"), ("bpy.types.freestylelinestyle*", "render/freestyle/parameter_editor/line_style/index.html#bpy-types-freestylelinestyle"), ("bpy.types.gammacrosssequence*", "video_editing/sequencer/strips/transitions/gamma_cross.html#bpy-types-gammacrosssequence"), ("bpy.types.geometrynodeswitch*", "modeling/geometry_nodes/utilities/switch.html#bpy-types-geometrynodeswitch"), @@ -1459,7 +1504,7 @@ url_manual_mapping = ( ("bpy.types.object.hide_select*", "scene_layout/object/properties/visibility.html#bpy-types-object-hide-select"), ("bpy.types.object.parent_type*", "scene_layout/object/properties/relations.html#bpy-types-object-parent-type"), ("bpy.types.object.show_bounds*", "scene_layout/object/properties/display.html#bpy-types-object-show-bounds"), - ("bpy.types.rendersettings.fps*", "render/output/properties/dimensions.html#bpy-types-rendersettings-fps"), + ("bpy.types.rendersettings.fps*", "render/output/properties/format.html#bpy-types-rendersettings-fps"), ("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"), @@ -1558,8 +1603,9 @@ url_manual_mapping = ( ("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"), + ("bpy.types.fcurve.color_mode*", "editors/graph_editor/fcurves/properties.html#bpy-types-fcurve-color-mode"), ("bpy.types.fluidflowsettings*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings"), - ("bpy.types.fmodifierenvelope*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifierenvelope"), + ("bpy.types.fmodifierenvelope*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifierenvelope"), ("bpy.types.freestylesettings*", "render/freestyle/view_layer.html#bpy-types-freestylesettings"), ("bpy.types.geometrynodegroup*", "modeling/geometry_nodes/group.html#bpy-types-geometrynodegroup"), ("bpy.types.gpencillayer.hide*", "grease_pencil/properties/layers.html#bpy-types-gpencillayer-hide"), @@ -1573,12 +1619,13 @@ url_manual_mapping = ( ("bpy.types.meshcachemodifier*", "modeling/modifiers/modify/mesh_cache.html#bpy-types-meshcachemodifier"), ("bpy.types.movieclipsequence*", "video_editing/sequencer/strips/clip.html#bpy-types-movieclipsequence"), ("bpy.types.object.dimensions*", "scene_layout/object/properties/transforms.html#bpy-types-object-dimensions"), + ("bpy.types.object.is_holdout*", "scene_layout/object/properties/visibility.html#bpy-types-object-is-holdout"), ("bpy.types.object.pass_index*", "scene_layout/object/properties/relations.html#bpy-types-object-pass-index"), ("bpy.types.object.track_axis*", "scene_layout/object/properties/relations.html#bpy-types-object-track-axis"), ("bpy.types.pose.use_mirror_x*", "animation/armatures/posing/tool_settings.html#bpy-types-pose-use-mirror-x"), ("bpy.types.preferencessystem*", "editors/preferences/system.html#bpy-types-preferencessystem"), ("bpy.types.scene.active_clip*", "scene_layout/scene/properties.html#bpy-types-scene-active-clip"), - ("bpy.types.scene.frame_start*", "render/output/properties/dimensions.html#bpy-types-scene-frame-start"), + ("bpy.types.scene.frame_start*", "render/output/properties/frame_range.html#bpy-types-scene-frame-start"), ("bpy.types.sceneeevee.shadow*", "render/eevee/render_settings/shadows.html#bpy-types-sceneeevee-shadow"), ("bpy.types.screen.use_follow*", "editors/timeline.html#bpy-types-screen-use-follow"), ("bpy.types.sequencetransform*", "video_editing/sequencer/sidebar/strip.html#bpy-types-sequencetransform"), @@ -1661,7 +1708,8 @@ url_manual_mapping = ( ("bpy.types.displaysafeareas*", "render/cameras.html#bpy-types-displaysafeareas"), ("bpy.types.editbone.bbone_x*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-x"), ("bpy.types.editbone.bbone_z*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-z"), - ("bpy.types.fmodifierstepped*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifierstepped"), + ("bpy.types.fcurve.data_path*", "editors/graph_editor/fcurves/properties.html#bpy-types-fcurve-data-path"), + ("bpy.types.fmodifierstepped*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifierstepped"), ("bpy.types.freestylelineset*", "render/freestyle/parameter_editor/line_set.html#bpy-types-freestylelineset"), ("bpy.types.mask.frame_start*", "movie_clip/masking/sidebar.html#bpy-types-mask-frame-start"), ("bpy.types.mesh.*customdata*", "modeling/meshes/properties/custom_data.html#bpy-types-mesh-customdata"), @@ -1675,7 +1723,7 @@ url_manual_mapping = ( ("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.scene.frame_step*", "render/output/properties/dimensions.html#bpy-types-scene-frame-step"), + ("bpy.types.scene.frame_step*", "render/output/properties/frame_range.html#bpy-types-scene-frame-step"), ("bpy.types.sceneeevee.bloom*", "render/eevee/render_settings/bloom.html#bpy-types-sceneeevee-bloom"), ("bpy.types.sculpt.show_mask*", "sculpt_paint/sculpting/editing/mask.html#bpy-types-sculpt-show-mask"), ("bpy.types.sequence.channel*", "video_editing/sequencer/sidebar/strip.html#bpy-types-sequence-channel"), @@ -1708,6 +1756,7 @@ url_manual_mapping = ( ("bpy.ops.clip.clean_tracks*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-clean-tracks"), ("bpy.ops.clip.delete_track*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-delete-track"), ("bpy.ops.clip.solve_camera*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-solve-camera"), + ("bpy.ops.constraint.delete*", "animation/constraints/interface/header.html#bpy-ops-constraint-delete"), ("bpy.ops.curve.smooth_tilt*", "modeling/curves/editing/control_points.html#bpy-ops-curve-smooth-tilt"), ("bpy.ops.fluid.bake_guides*", "physics/fluid/type/domain/guides.html#bpy-ops-fluid-bake-guides"), ("bpy.ops.fluid.free_guides*", "physics/fluid/type/domain/guides.html#bpy-ops-fluid-free-guides"), @@ -1751,15 +1800,16 @@ url_manual_mapping = ( ("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"), + ("bpy.types.constraint.name*", "animation/constraints/interface/header.html#bpy-types-constraint-name"), ("bpy.types.curve.eval_time*", "modeling/curves/properties/path_animation.html#bpy-types-curve-eval-time"), ("bpy.types.curve.fill_mode*", "modeling/curves/properties/shape.html#bpy-types-curve-fill-mode"), ("bpy.types.editbone.layers*", "animation/armatures/bones/properties/relations.html#bpy-types-editbone-layers"), ("bpy.types.editbone.parent*", "animation/armatures/bones/properties/relations.html#bpy-types-editbone-parent"), ("bpy.types.explodemodifier*", "modeling/modifiers/physics/explode.html#bpy-types-explodemodifier"), - ("bpy.types.fcurvemodifiers*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fcurvemodifiers"), + ("bpy.types.fcurvemodifiers*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fcurvemodifiers"), ("bpy.types.floorconstraint*", "animation/constraints/relationship/floor.html#bpy-types-floorconstraint"), - ("bpy.types.fmodifiercycles*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifiercycles"), - ("bpy.types.fmodifierlimits*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifierlimits"), + ("bpy.types.fmodifiercycles*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifiercycles"), + ("bpy.types.fmodifierlimits*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifierlimits"), ("bpy.types.imagepaint.mode*", "sculpt_paint/texture_paint/tool_settings/texture_slots.html#bpy-types-imagepaint-mode"), ("bpy.types.latticemodifier*", "modeling/modifiers/deform/lattice.html#bpy-types-latticemodifier"), ("bpy.types.musgravetexture*", "render/materials/legacy_textures/types/musgrave.html#bpy-types-musgravetexture"), @@ -1770,7 +1820,7 @@ url_manual_mapping = ( ("bpy.types.preferencesedit*", "editors/preferences/editing.html#bpy-types-preferencesedit"), ("bpy.types.preferencesview*", "editors/preferences/interface.html#bpy-types-preferencesview"), ("bpy.types.rigidbodyobject*", "physics/rigid_body/index.html#bpy-types-rigidbodyobject"), - ("bpy.types.scene.frame_end*", "render/output/properties/dimensions.html#bpy-types-scene-frame-end"), + ("bpy.types.scene.frame_end*", "render/output/properties/frame_range.html#bpy-types-scene-frame-end"), ("bpy.types.sceneeevee.gtao*", "render/eevee/render_settings/ambient_occlusion.html#bpy-types-sceneeevee-gtao"), ("bpy.types.screen.use_play*", "editors/timeline.html#bpy-types-screen-use-play"), ("bpy.types.shadernodebevel*", "render/shader_nodes/input/bevel.html#bpy-types-shadernodebevel"), @@ -1786,6 +1836,7 @@ url_manual_mapping = ( ("bpy.types.texturenodemath*", "editors/texture_node/types/converter/math.html#bpy-types-texturenodemath"), ("bpy.types.volume.filepath*", "modeling/volumes/properties.html#bpy-types-volume-filepath"), ("bpy.ops.clip.join_tracks*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-join-tracks"), + ("bpy.ops.constraint.apply*", "animation/constraints/interface/header.html#bpy-ops-constraint-apply"), ("bpy.ops.curve.select_row*", "modeling/surfaces/selecting.html#bpy-ops-curve-select-row"), ("bpy.ops.curve.tilt_clear*", "modeling/curves/editing/control_points.html#bpy-ops-curve-tilt-clear"), ("bpy.ops.curve.vertex_add*", "modeling/curves/editing/other.html#bpy-ops-curve-vertex-add"), @@ -1829,7 +1880,8 @@ url_manual_mapping = ( ("bpy.types.brush.hardness*", "sculpt_paint/sculpting/tool_settings/brush_settings.html#bpy-types-brush-hardness"), ("bpy.types.curvesmodifier*", "video_editing/sequencer/sidebar/modifiers.html#bpy-types-curvesmodifier"), ("bpy.types.ffmpegsettings*", "render/output/properties/output.html#bpy-types-ffmpegsettings"), - ("bpy.types.fmodifiernoise*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifiernoise"), + ("bpy.types.fmodifiernoise*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifiernoise"), + ("bpy.types.keyframe.co_ui*", "editors/graph_editor/fcurves/properties.html#bpy-types-keyframe-co-ui"), ("bpy.types.mask.frame_end*", "movie_clip/masking/sidebar.html#bpy-types-mask-frame-end"), ("bpy.types.material.paint*", "sculpt_paint/texture_paint/index.html#bpy-types-material-paint"), ("bpy.types.mirrormodifier*", "modeling/modifiers/generate/mirror.html#bpy-types-mirrormodifier"), @@ -1861,6 +1913,7 @@ url_manual_mapping = ( ("bpy.ops.clip.select_all*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-select-all"), ("bpy.ops.clip.select_box*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-select-box"), ("bpy.ops.clip.set_origin*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-set-origin"), + ("bpy.ops.constraint.copy*", "animation/constraints/interface/header.html#bpy-ops-constraint-copy"), ("bpy.ops.curve.subdivide*", "modeling/curves/editing/segments.html#bpy-ops-curve-subdivide"), ("bpy.ops.ed.undo_history*", "interface/undo_redo.html#bpy-ops-ed-undo-history"), ("bpy.ops.file.unpack_all*", "files/blend/packed_data.html#bpy-ops-file-unpack-all"), @@ -1924,6 +1977,7 @@ url_manual_mapping = ( ("bpy.types.fieldsettings*", "physics/forces/force_fields/index.html#bpy-types-fieldsettings"), ("bpy.types.imagesequence*", "video_editing/sequencer/strips/image.html#bpy-types-imagesequence"), ("bpy.types.marbletexture*", "render/materials/legacy_textures/types/marble.html#bpy-types-marbletexture"), + ("bpy.types.modifier.name*", "modeling/modifiers/introduction.html#bpy-types-modifier-name"), ("bpy.types.modifier.show*", "modeling/modifiers/introduction.html#bpy-types-modifier-show"), ("bpy.types.moviesequence*", "video_editing/sequencer/strips/movie.html#bpy-types-moviesequence"), ("bpy.types.movietracking*", "movie_clip/tracking/index.html#bpy-types-movietracking"), @@ -2106,6 +2160,7 @@ url_manual_mapping = ( ("bpy.types.compositor*", "compositing/index.html#bpy-types-compositor"), ("bpy.types.constraint*", "animation/constraints/index.html#bpy-types-constraint"), ("bpy.types.imagepaint*", "sculpt_paint/texture_paint/index.html#bpy-types-imagepaint"), + ("bpy.types.keymapitem*", "editors/preferences/keymap.html#bpy-types-keymapitem"), ("bpy.types.lightprobe*", "render/eevee/light_probes/index.html#bpy-types-lightprobe"), ("bpy.types.maskparent*", "movie_clip/masking/sidebar.html#bpy-types-maskparent"), ("bpy.types.maskspline*", "movie_clip/masking/sidebar.html#bpy-types-maskspline"), @@ -2142,7 +2197,7 @@ url_manual_mapping = ( ("bpy.types.bone.hide*", "animation/armatures/bones/properties/display.html#bpy-types-bone-hide"), ("bpy.types.colorramp*", "interface/controls/templates/color_ramp.html#bpy-types-colorramp"), ("bpy.types.dopesheet*", "editors/dope_sheet/index.html#bpy-types-dopesheet"), - ("bpy.types.fmodifier*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifier"), + ("bpy.types.fmodifier*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifier"), ("bpy.types.freestyle*", "render/freestyle/index.html#bpy-types-freestyle"), ("bpy.types.masklayer*", "movie_clip/masking/sidebar.html#bpy-types-masklayer"), ("bpy.types.movieclip*", "movie_clip/index.html#bpy-types-movieclip"), diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 6a9306c2eab..44b77ab2aac 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -2606,8 +2606,7 @@ def km_sequencer(params): for i in range(10) ) ), - ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS'}, - {"properties": [("deselect_all", True)]}), + ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS'}, None), ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True}, {"properties": [("extend", True)]}), ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS', "alt": True}, @@ -6997,8 +6996,7 @@ def km_sequencer_editor_tool_select(params): "Sequencer Tool: Select", {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, {"items": [ - ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS'}, - {"properties": [("deselect_all", not params.legacy)]}), + ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS'}, None), *_template_items_change_frame(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 dba94d71a43..dbe351eb10c 100644 --- a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py +++ b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py @@ -1814,8 +1814,7 @@ def km_sequencer(params): for i in range(10) ) ), - ("sequencer.select", {"type": 'LEFTMOUSE', "value": 'PRESS'}, - {"properties": [("deselect_all", True)]}), + ("sequencer.select", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), ("sequencer.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, {"properties": [("extend", True)]}), ("sequencer.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True}, 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 be47890a002..c8328f5ee42 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 @@ -46,6 +46,7 @@ def update_factory_startup_screens(): def update_factory_startup_scenes(): for scene in bpy.data.scenes: scene.tool_settings.use_keyframe_insert_auto = True + scene.tool_settings.gpencil_sculpt.use_scale_thickness = True def update_factory_startup_grease_pencils(): diff --git a/release/scripts/startup/bl_operators/assets.py b/release/scripts/startup/bl_operators/assets.py index 8c76018b7a1..b241e537c38 100644 --- a/release/scripts/startup/bl_operators/assets.py +++ b/release/scripts/startup/bl_operators/assets.py @@ -85,9 +85,9 @@ class ASSET_OT_open_containing_blend_file(Operator): @classmethod def poll(cls, context): asset_file_handle = getattr(context, 'asset_file_handle', None) - asset_library = getattr(context, 'asset_library', None) + asset_library_ref = getattr(context, 'asset_library_ref', None) - if not asset_library: + if not asset_library_ref: cls.poll_message_set("No asset library selected") return False if not asset_file_handle: @@ -100,13 +100,13 @@ class ASSET_OT_open_containing_blend_file(Operator): def execute(self, context): asset_file_handle = context.asset_file_handle - asset_library = context.asset_library + asset_library_ref = context.asset_library_ref if asset_file_handle.local_id: self.report({'WARNING'}, "This asset is stored in the current blend file") return {'CANCELLED'} - asset_lib_path = bpy.types.AssetHandle.get_full_library_path(asset_file_handle, asset_library) + asset_lib_path = bpy.types.AssetHandle.get_full_library_path(asset_file_handle, asset_library_ref) self.open_in_new_blender(asset_lib_path) wm = context.window_manager diff --git a/release/scripts/startup/bl_operators/geometry_nodes.py b/release/scripts/startup/bl_operators/geometry_nodes.py index ec2887a1a74..258a73bd70b 100644 --- a/release/scripts/startup/bl_operators/geometry_nodes.py +++ b/release/scripts/startup/bl_operators/geometry_nodes.py @@ -42,8 +42,8 @@ def geometry_node_group_empty_new(): def geometry_modifier_poll(context): ob = context.object - # Test object support for geometry node modifier (No curve, or hair object support yet) - if not ob or ob.type not in {'MESH', 'POINTCLOUD', 'VOLUME'}: + # Test object support for geometry node modifier (No hair object support yet) + if not ob or ob.type not in {'MESH', 'POINTCLOUD', 'VOLUME', 'CURVE', 'FONT'}: return False return True diff --git a/release/scripts/startup/bl_ui/properties_data_curve.py b/release/scripts/startup/bl_ui/properties_data_curve.py index 85f672cd50f..e5b675db2c5 100644 --- a/release/scripts/startup/bl_ui/properties_data_curve.py +++ b/release/scripts/startup/bl_ui/properties_data_curve.py @@ -120,7 +120,6 @@ class DATA_PT_shape_curve(CurveButtonsPanel, Panel): sub = col.column() 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") if is_curve: col = layout.column() diff --git a/release/scripts/startup/bl_ui/properties_freestyle.py b/release/scripts/startup/bl_ui/properties_freestyle.py index fd12747e2fa..3c765c10154 100644 --- a/release/scripts/startup/bl_ui/properties_freestyle.py +++ b/release/scripts/startup/bl_ui/properties_freestyle.py @@ -22,7 +22,6 @@ from bpy.types import Menu, Panel, UIList # Render properties - class RenderFreestyleButtonsPanel: bl_space_type = 'PROPERTIES' bl_region_type = 'WINDOW' @@ -49,20 +48,17 @@ class RENDER_PT_freestyle(RenderFreestyleButtonsPanel, Panel): def draw(self, context): layout = self.layout layout.use_property_split = True - layout.use_property_decorate = False # No animation. - + layout.use_property_decorate = False rd = context.scene.render - layout.active = rd.use_freestyle - - layout.prop(rd, "line_thickness_mode", expand=True) - + layout.row().prop(rd, "line_thickness_mode", expand=True, text="Line Thickness Mode") if rd.line_thickness_mode == 'ABSOLUTE': layout.prop(rd, "line_thickness") # Render layer properties + class ViewLayerFreestyleButtonsPanel: bl_space_type = 'PROPERTIES' bl_region_type = 'WINDOW' @@ -76,8 +72,12 @@ class ViewLayerFreestyleButtonsPanel: rd = scene.render with_freestyle = bpy.app.build_options.freestyle - return (scene and with_freestyle and rd.use_freestyle and - (context.engine in cls.COMPAT_ENGINES)) + return ( + scene + and with_freestyle + and rd.use_freestyle + and (context.engine in cls.COMPAT_ENGINES) + ) class ViewLayerFreestyleEditorButtonsPanel(ViewLayerFreestyleButtonsPanel): @@ -88,7 +88,35 @@ class ViewLayerFreestyleEditorButtonsPanel(ViewLayerFreestyleButtonsPanel): if not super().poll(context): return False view_layer = context.view_layer - return view_layer and view_layer.freestyle_settings.mode == 'EDITOR' + return ( + view_layer + and view_layer.use_freestyle + and view_layer.freestyle_settings.mode == 'EDITOR' + ) + + +class ViewLayerFreestyleLineStyle(ViewLayerFreestyleEditorButtonsPanel): + # Freestyle Linestyle Panels + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'} + + @classmethod + def poll(cls, context): + if not super().poll(context): + return False + view_layer = context.view_layer + lineset = view_layer.freestyle_settings.linesets.active + if lineset is None: + return False + linestyle = lineset.linestyle + if linestyle is None: + return False + + return True + + +class ViewLayerFreestyleLinestyleStrokesSubPanel(ViewLayerFreestyleLineStyle): + # Freestyle Linestyle Strokes sub panels + bl_parent_id = "VIEWLAYER_PT_freestyle_linestyle_strokes" class VIEWLAYER_UL_linesets(UIList): @@ -126,54 +154,85 @@ class VIEWLAYER_PT_freestyle(ViewLayerFreestyleButtonsPanel, Panel): def draw(self, context): layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False view_layer = context.view_layer freestyle = view_layer.freestyle_settings layout.active = view_layer.use_freestyle - row = layout.row() - layout.prop(freestyle, "mode", text="Control Mode") - layout.prop(freestyle, "use_view_map_cache", text="View Map Cache") - layout.prop(freestyle, "as_render_pass", text="As Render Pass") - layout.label(text="Edge Detection Options:") + col = layout.column(align=True) + col.prop(freestyle, "mode", text="Control Mode") + col.prop(freestyle, "use_view_map_cache", text="View Map Cache") + col.prop(freestyle, "as_render_pass", text="As Render Pass") + + +class VIEWLAYER_PT_freestyle_edge_detection(ViewLayerFreestyleButtonsPanel, Panel): + bl_label = "Edge Detection" + bl_parent_id = "VIEWLAYER_PT_freestyle" + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'} + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False - split = layout.split() + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + + layout.active = view_layer.use_freestyle - col = split.column() + col = layout.column() col.prop(freestyle, "crease_angle") col.prop(freestyle, "use_culling") - col.prop(freestyle, "use_advanced_options") - - col = split.column() col.prop(freestyle, "use_smoothness") + if freestyle.mode == 'SCRIPT': col.prop(freestyle, "use_material_boundaries") - # Advanced options are hidden by default to warn new users - if freestyle.use_advanced_options: - if freestyle.mode == 'SCRIPT': - row = layout.row() - row.prop(freestyle, "use_ridges_and_valleys") - row.prop(freestyle, "use_suggestive_contours") - row = layout.row() - row.prop(freestyle, "sphere_radius") - row.prop(freestyle, "kr_derivative_epsilon") - if freestyle.mode == 'SCRIPT': - row = layout.row() - row.label(text="Style Modules:") - row.operator("scene.freestyle_module_add", text="Add") - for module in freestyle.modules: - box = layout.box() - box.context_pointer_set("freestyle_module", module) - row = box.row(align=True) - row.prop(module, "use", text="") - row.prop(module, "script", text="") - row.operator("scene.freestyle_module_open", icon='FILEBROWSER', text="") - row.operator("scene.freestyle_module_remove", icon='X', text="") - row.operator("scene.freestyle_module_move", icon='TRIA_UP', text="").direction = 'UP' - row.operator("scene.freestyle_module_move", icon='TRIA_DOWN', text="").direction = 'DOWN' + col.prop(freestyle, "use_ridges_and_valleys") + col.prop(freestyle, "use_suggestive_contours") + col.prop(freestyle, "sphere_radius") + col.prop(freestyle, "kr_derivative_epsilon") + + +class VIEWLAYER_PT_freestyle_style_modules(ViewLayerFreestyleButtonsPanel, Panel): + bl_label = "Style Modules" + bl_parent_id = "VIEWLAYER_PT_freestyle" + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'} + + @classmethod + def poll(cls, context): + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + return freestyle.mode == 'SCRIPT' + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + + layout.active = view_layer.use_freestyle + + col = layout.column() + col.use_property_split = False + row = col.row() + row.operator("scene.freestyle_module_add", text="Add") + for module in freestyle.modules: + box = col.box() + box.context_pointer_set("freestyle_module", module) + row = box.row(align=True) + row.prop(module, "use", text="") + row.prop(module, "script", text="") + row.operator("scene.freestyle_module_open", icon='FILEBROWSER', text="") + row.operator("scene.freestyle_module_remove", icon='X', text="") + row.operator("scene.freestyle_module_move", icon='TRIA_UP', text="").direction = 'UP' + row.operator("scene.freestyle_module_move", icon='TRIA_DOWN', text="").direction = 'DOWN' class VIEWLAYER_PT_freestyle_lineset(ViewLayerFreestyleEditorButtonsPanel, Panel): @@ -198,10 +257,13 @@ class VIEWLAYER_PT_freestyle_lineset(ViewLayerFreestyleEditorButtonsPanel, Panel freestyle = view_layer.freestyle_settings lineset = freestyle.linesets.active - layout.active = view_layer.use_freestyle - row = layout.row() - rows = 4 if lineset else 2 + + is_sortable = len(freestyle.linesets) > 1 + rows = 3 + if is_sortable: + rows = 5 + row.template_list( "VIEWLAYER_UL_linesets", "", @@ -212,157 +274,504 @@ class VIEWLAYER_PT_freestyle_lineset(ViewLayerFreestyleEditorButtonsPanel, Panel rows=rows, ) - sub = row.column(align=True) - sub.operator("scene.freestyle_lineset_add", icon='ADD', text="") - sub.operator("scene.freestyle_lineset_remove", icon='REMOVE', text="") - sub.menu("RENDER_MT_lineset_context_menu", icon='DOWNARROW_HLT', text="") + col = row.column(align=True) + col.operator("scene.freestyle_lineset_add", icon='ADD', text="") + col.operator("scene.freestyle_lineset_remove", icon='REMOVE', text="") + + col.separator() + + col.menu("RENDER_MT_lineset_context_menu", icon="DOWNARROW_HLT", text="") + + if is_sortable: + col.separator() + col.operator("scene.freestyle_lineset_move", icon='TRIA_UP', text="").direction = 'UP' + col.operator("scene.freestyle_lineset_move", icon='TRIA_DOWN', text="").direction = 'DOWN' + if lineset: - sub.separator() - sub.separator() - sub.operator("scene.freestyle_lineset_move", icon='TRIA_UP', text="").direction = 'UP' - sub.operator("scene.freestyle_lineset_move", icon='TRIA_DOWN', text="").direction = 'DOWN' - - col = layout.column() - col.label(text="Selection By:") - row = col.row(align=True) - row.prop(lineset, "select_by_visibility", text="Visibility", toggle=True) - row.prop(lineset, "select_by_edge_types", text="Edge Types", toggle=True) - row.prop(lineset, "select_by_face_marks", text="Face Marks", toggle=True) - row.prop(lineset, "select_by_collection", text="Collection", toggle=True) - row.prop(lineset, "select_by_image_border", text="Image Border", toggle=True) - - if lineset.select_by_visibility: - col.label(text="Visibility:") - row = col.row(align=True) - row.prop(lineset, "visibility", expand=True) - if lineset.visibility == 'RANGE': - row = col.row(align=True) - row.prop(lineset, "qi_start") - row.prop(lineset, "qi_end") - - if lineset.select_by_edge_types: - col.label(text="Edge Types:") - row = col.row() - row.prop(lineset, "edge_type_negation", expand=True) - row.prop(lineset, "edge_type_combination", expand=True) - - split = col.split() - - sub = split.column() - self.draw_edge_type_buttons(sub, lineset, "silhouette") - self.draw_edge_type_buttons(sub, lineset, "border") - self.draw_edge_type_buttons(sub, lineset, "contour") - self.draw_edge_type_buttons(sub, lineset, "suggestive_contour") - self.draw_edge_type_buttons(sub, lineset, "ridge_valley") - - sub = split.column() - self.draw_edge_type_buttons(sub, lineset, "crease") - self.draw_edge_type_buttons(sub, lineset, "edge_mark") - self.draw_edge_type_buttons(sub, lineset, "external_contour") - self.draw_edge_type_buttons(sub, lineset, "material_boundary") - - if lineset.select_by_face_marks: - col.label(text="Face Marks:") - row = col.row() - row.prop(lineset, "face_mark_negation", expand=True) - row.prop(lineset, "face_mark_condition", expand=True) - - if lineset.select_by_collection: - col.label(text="Collection:") - row = col.row() - row.prop(lineset, "collection", text="") - row.prop(lineset, "collection_negation", expand=True) - - -class VIEWLAYER_PT_freestyle_linestyle(ViewLayerFreestyleEditorButtonsPanel, Panel): - bl_label = "Freestyle Line Style" + layout.template_ID(lineset, "linestyle", new="scene.freestyle_linestyle_new") + layout.separator() + col = layout.column(heading="Select by") + col.use_property_split = True + col.use_property_decorate = False + col.prop(lineset, "select_by_image_border", text="Image Border") + + +# Freestyle Lineset Sub Panels +class VIEWLAYER_PT_freestyle_lineset_visibilty(ViewLayerFreestyleLineStyle, Panel): + bl_label = "Visibility" + bl_parent_id = "VIEWLAYER_PT_freestyle_lineset" + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'} + + def draw_header(self, context): + layout = self.layout + + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + lineset = freestyle.linesets.active + + layout.prop(lineset, "select_by_visibility", text="") + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + lineset = freestyle.linesets.active + + layout.active = lineset.select_by_visibility + col = layout.column(align=True, heading="Type") + col.prop(lineset, "visibility", text="Type", expand=False) + + if lineset.visibility == 'RANGE': + col = layout.column(align=True) + col.use_property_split = True + col.prop(lineset, "qi_start") + col.prop(lineset, "qi_end") + + +class VIEWLAYER_PT_freestyle_lineset_edgetype(ViewLayerFreestyleLineStyle, Panel): + bl_label = "Edge Type" + bl_parent_id = "VIEWLAYER_PT_freestyle_lineset" + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'} + + def draw_header(self, context): + layout = self.layout + + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + lineset = freestyle.linesets.active + + layout.prop(lineset, "select_by_edge_types", text="") + + def draw_edge_type_buttons(self, box, lineset, edge_type): + # property names + select_edge_type = "select_" + edge_type + exclude_edge_type = "exclude_" + edge_type + # draw edge type buttons + row = box.row(align=True) + row.prop(lineset, select_edge_type) + sub = row.column(align=True) + sub.prop(lineset, exclude_edge_type, text="") + sub.active = getattr(lineset, select_edge_type) + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + lineset = freestyle.linesets.active + + layout.active = lineset.select_by_edge_types + layout.row().prop(lineset, "edge_type_negation", expand=True, text="Negation") + layout.row().prop(lineset, "edge_type_combination", expand=True, text="Combination") + + col = layout.column(heading="Type") + self.draw_edge_type_buttons(col, lineset, "silhouette") + self.draw_edge_type_buttons(col, lineset, "crease") + self.draw_edge_type_buttons(col, lineset, "border") + self.draw_edge_type_buttons(col, lineset, "edge_mark") + self.draw_edge_type_buttons(col, lineset, "contour") + self.draw_edge_type_buttons(col, lineset, "external_contour") + self.draw_edge_type_buttons(col, lineset, "material_boundary") + self.draw_edge_type_buttons(col, lineset, "suggestive_contour") + self.draw_edge_type_buttons(col, lineset, "ridge_valley") + + +class VIEWLAYER_PT_freestyle_lineset_facemarks(ViewLayerFreestyleLineStyle, Panel): + bl_label = "Face Marks" + bl_parent_id = "VIEWLAYER_PT_freestyle_lineset" + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'} bl_options = {'DEFAULT_CLOSED'} + + def draw_header(self, context): + layout = self.layout + + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + lineset = freestyle.linesets.active + + layout.prop(lineset, "select_by_face_marks", text="") + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + lineset = freestyle.linesets.active + + layout.active = lineset.select_by_face_marks + layout.row().prop(lineset, "face_mark_negation", expand=True, text="Negation") + layout.row().prop(lineset, "face_mark_condition", expand=True, text="Condition") + + +class VIEWLAYER_PT_freestyle_lineset_collection(ViewLayerFreestyleLineStyle, Panel): + bl_label = "Collection" + bl_parent_id = "VIEWLAYER_PT_freestyle_lineset" COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'} + bl_options = {'DEFAULT_CLOSED'} - def draw_modifier_box_header(self, box, modifier): - row = box.row() - row.context_pointer_set("modifier", modifier) - if modifier.expanded: - icon = 'TRIA_DOWN' - else: - icon = 'TRIA_RIGHT' - row.prop(modifier, "expanded", text="", icon=icon, emboss=False) - # TODO: Use icons rather than text label, would save some room! - row.label(text=modifier.rna_type.name) - row.prop(modifier, "name", text="") - if modifier.use: - icon = 'RESTRICT_RENDER_OFF' - else: - icon = 'RESTRICT_RENDER_ON' - row.prop(modifier, "use", text="", icon=icon) - sub = row.row(align=True) - sub.operator("scene.freestyle_modifier_copy", icon='NONE', text="Copy") - sub.operator("scene.freestyle_modifier_move", icon='TRIA_UP', text="").direction = 'UP' - sub.operator("scene.freestyle_modifier_move", icon='TRIA_DOWN', text="").direction = 'DOWN' - sub.operator("scene.freestyle_modifier_remove", icon='X', text="") - - def draw_modifier_box_error(self, box, _modifier, message): - row = box.row() - row.label(text=message, icon='ERROR') - - def draw_modifier_common(self, box, modifier): - row = box.row() - row.prop(modifier, "blend", text="") - row.prop(modifier, "influence") - - def draw_modifier_color_ramp_common(self, box, modifier, has_range): - box.template_color_ramp(modifier, "color_ramp", expand=True) - if has_range: - row = box.row(align=True) - row.prop(modifier, "range_min") - row.prop(modifier, "range_max") - - def draw_modifier_curve_common(self, box, modifier, has_range, has_value): - row = box.row() - row.prop(modifier, "mapping", text="") - sub = row.column() - sub.prop(modifier, "invert") - if modifier.mapping == 'CURVE': - sub.active = False - box.template_curve_mapping(modifier, "curve") - if has_range: - row = box.row(align=True) - row.prop(modifier, "range_min") - row.prop(modifier, "range_max") - if has_value: - row = box.row(align=True) - row.prop(modifier, "value_min") - row.prop(modifier, "value_max") + def draw_header(self, context): + layout = self.layout + + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + lineset = freestyle.linesets.active + + layout.prop(lineset, "select_by_collection", text="") + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + lineset = freestyle.linesets.active + + layout.active = lineset.select_by_collection + layout.row().prop(lineset, "collection", text="Line Set Collection") + layout.row().prop(lineset, "collection_negation", expand=True, text="Negation") + + +# Linestyle Modifier Drawing code +def draw_modifier_box_header(box, modifier): + row = box.row() + row.use_property_split = False + row.context_pointer_set("modifier", modifier) + if modifier.expanded: + icon = 'TRIA_DOWN' + else: + icon = 'TRIA_RIGHT' + row.prop(modifier, "expanded", text="", icon=icon, emboss=False) + + sub = row.row(align=True) + sub.prop(modifier, "name", text="") + if modifier.use: + icon = 'RESTRICT_RENDER_OFF' + else: + icon = 'RESTRICT_RENDER_ON' + sub.prop(modifier, "use", text="", icon=icon) + sub.operator("scene.freestyle_modifier_copy", icon='DUPLICATE', text="") + + sub = row.row(align=True) + sub.operator("scene.freestyle_modifier_move", icon='TRIA_UP', text="").direction = 'UP' + sub.operator("scene.freestyle_modifier_move", icon='TRIA_DOWN', text="").direction = 'DOWN' + + row.operator("scene.freestyle_modifier_remove", icon='X', text="", emboss=False) + + +def draw_modifier_box_error(box, _modifier, message): + row = box.row() + row.label(text=message, icon='ERROR') + + +def draw_modifier_common(box, modifier): + col = box.column() + col.prop(modifier, "blend", text="Blend Mode") + col.prop(modifier, "influence") + + +def draw_modifier_color_ramp_common(box, modifier, has_range): + box.template_color_ramp(modifier, "color_ramp", expand=True) + if has_range: + col = box.column(align=True) + col.prop(modifier, "range_min", text="Range Min") + col.prop(modifier, "range_max", text="Max") + + +def draw_modifier_curve_common(box, modifier, has_range, has_value): + row = box.row() + row.prop(modifier, "mapping", text="Mapping") + if modifier.mapping == 'LINEAR': + box.prop(modifier, "invert") + if has_range: + col = box.column(align=True) + col.prop(modifier, "range_min", text="Range Min") + col.prop(modifier, "range_max", text="Max") + if has_value: + col = box.column(align=True) + col.prop(modifier, "value_min", text="Value Min") + col.prop(modifier, "value_max", text="Max") + if modifier.mapping == 'CURVE': + box.template_curve_mapping(modifier, "curve") + + +class VIEWLAYER_PT_freestyle_linestyle_strokes(ViewLayerFreestyleLineStyle, Panel): + bl_label = "Freestyle Strokes" + bl_options = {'DEFAULT_CLOSED'} + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + lineset = view_layer.freestyle_settings.linesets.active + + layout.active = view_layer.use_freestyle + + if lineset is None: + return + linestyle = lineset.linestyle + + if linestyle is None: + return + + row = layout.row(align=True) + row.alignment = 'LEFT' + row.label(text=lineset.name, icon='LINE_DATA') + row.label(text="", icon='SMALL_TRI_RIGHT_VEC') + row.label(text=linestyle.name) + + col = layout.column(align=True) + col.prop(linestyle, "caps", expand=False) + + +class VIEWLAYER_PT_freestyle_linestyle_strokes_chaining(ViewLayerFreestyleLinestyleStrokesSubPanel, Panel): + bl_label = "Chaining" + + def draw_header(self, context): + layout = self.layout + + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + lineset = freestyle.linesets.active + + linestyle = lineset.linestyle + layout.prop(linestyle, "use_chaining", text="") + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + lineset = view_layer.freestyle_settings.linesets.active + linestyle = lineset.linestyle + + layout.active = linestyle.use_chaining + layout.row().prop(linestyle, "chaining", expand=True, text="Method") + if linestyle.chaining == 'SKETCHY': + layout.prop(linestyle, "rounds") + layout.prop(linestyle, "use_same_object") + + +class VIEWLAYER_PT_freestyle_linestyle_strokes_splitting(ViewLayerFreestyleLinestyleStrokesSubPanel, Panel): + bl_label = "Splitting" + bl_options = {'DEFAULT_CLOSED'} + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + lineset = view_layer.freestyle_settings.linesets.active + linestyle = lineset.linestyle + + row = layout.row(align=False, heading="Min 2D Angle") + row.prop(linestyle, "use_angle_min", text="") + sub = row.row() + sub.active = linestyle.use_angle_min + sub.prop(linestyle, "angle_min", text="") + + row = layout.row(align=False, heading="Max 2D Angle") + row.prop(linestyle, "use_angle_max", text="") + sub = row.row() + sub.active = linestyle.use_angle_max + sub.prop(linestyle, "angle_max", text="") + + row = layout.row(align=False, heading="2D Length") + row.prop(linestyle, "use_split_length", text="") + sub = row.row() + sub.active = linestyle.use_split_length + sub.prop(linestyle, "split_length", text="") + + layout.prop(linestyle, "material_boundary") + + +class VIEWLAYER_PT_freestyle_linestyle_strokes_splitting_pattern(ViewLayerFreestyleLinestyleStrokesSubPanel, Panel): + bl_label = "Split Pattern" + bl_parent_id = "VIEWLAYER_PT_freestyle_linestyle_strokes_splitting" + bl_options = {'DEFAULT_CLOSED'} + + def draw_header(self, context): + layout = self.layout + + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + lineset = freestyle.linesets.active + + linestyle = lineset.linestyle + layout.prop(linestyle, "use_split_pattern", text="") + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + lineset = view_layer.freestyle_settings.linesets.active + linestyle = lineset.linestyle + + layout.active = linestyle.use_split_pattern + + col = layout.column(align=True) + col.prop(linestyle, "split_dash1", text="Dash 1") + col.prop(linestyle, "split_dash2", text="2") + col.prop(linestyle, "split_dash3", text="3") + col = layout.column(align=True) + col.prop(linestyle, "split_gap1", text="Gap 1") + col.prop(linestyle, "split_gap2", text="2") + col.prop(linestyle, "split_gap3", text="3") + + +class VIEWLAYER_PT_freestyle_linestyle_strokes_sorting(ViewLayerFreestyleLinestyleStrokesSubPanel, Panel): + bl_label = "Sorting" + bl_options = {'DEFAULT_CLOSED'} + + def draw_header(self, context): + layout = self.layout + + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + lineset = freestyle.linesets.active + + linestyle = lineset.linestyle + layout.prop(linestyle, "use_sorting", text="") + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + lineset = freestyle.linesets.active + + linestyle = lineset.linestyle + + layout.active = linestyle.use_sorting + + layout.prop(linestyle, "sort_key") + + row = layout.row() + row.active = linestyle.sort_key in { + 'DISTANCE_FROM_CAMERA', + 'PROJECTED_X', + 'PROJECTED_Y', + } + row.prop(linestyle, "integration_type") + layout.row().prop(linestyle, "sort_order", expand=True, text="Sort Order") + + +class VIEWLAYER_PT_freestyle_linestyle_strokes_selection(ViewLayerFreestyleLinestyleStrokesSubPanel, Panel): + bl_label = "Selection" + bl_options = {'DEFAULT_CLOSED'} + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + lineset = view_layer.freestyle_settings.linesets.active + linestyle = lineset.linestyle + + row = layout.row(align=False, heading="Min 2D Length") + row.prop(linestyle, "use_length_min", text="") + sub = row.row() + sub.active = linestyle.use_length_min + sub.prop(linestyle, "length_min", text="") + + row = layout.row(align=False, heading="Max 2D Length") + row.prop(linestyle, "use_length_max", text="") + sub = row.row() + sub.active = linestyle.use_length_max + sub.prop(linestyle, "length_max", text="") + + row = layout.row(align=False, heading="Chain Count") + row.prop(linestyle, "use_chain_count", text="") + sub = row.row() + sub.active = linestyle.use_chain_count + sub.prop(linestyle, "chain_count", text="") + + +class VIEWLAYER_PT_freestyle_linestyle_strokes_dashedline(ViewLayerFreestyleLinestyleStrokesSubPanel, Panel): + bl_label = "Dashed Line" + bl_options = {'DEFAULT_CLOSED'} + + def draw_header(self, context): + layout = self.layout + + view_layer = context.view_layer + freestyle = view_layer.freestyle_settings + lineset = freestyle.linesets.active + + linestyle = lineset.linestyle + layout.prop(linestyle, "use_dashed_line", text="") + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + lineset = view_layer.freestyle_settings.linesets.active + linestyle = lineset.linestyle + + layout.active = linestyle.use_dashed_line + + col = layout.column(align=True) + col.prop(linestyle, "dash1", text="Dash 1") + col.prop(linestyle, "dash2", text="2") + col.prop(linestyle, "dash3", text="3") + col = layout.column(align=True) + col.prop(linestyle, "gap1", text="Gap 1") + col.prop(linestyle, "gap2", text="2") + col.prop(linestyle, "gap3", text="3") + + +class VIEWLAYER_PT_freestyle_linestyle_color(ViewLayerFreestyleLineStyle, Panel): + bl_label = "Freestyle Color" + bl_options = {'DEFAULT_CLOSED'} def draw_color_modifier(self, context, modifier): layout = self.layout col = layout.column(align=True) - self.draw_modifier_box_header(col.box(), modifier) + draw_modifier_box_header(col.box(), modifier) if modifier.expanded: box = col.box() - self.draw_modifier_common(box, modifier) + draw_modifier_common(box, modifier) if modifier.type == 'ALONG_STROKE': - self.draw_modifier_color_ramp_common(box, modifier, False) + draw_modifier_color_ramp_common(box, modifier, False) elif modifier.type == 'DISTANCE_FROM_OBJECT': box.prop(modifier, "target") - self.draw_modifier_color_ramp_common(box, modifier, True) + draw_modifier_color_ramp_common(box, modifier, True) prop = box.operator("scene.freestyle_fill_range_by_selection") prop.type = 'COLOR' prop.name = modifier.name elif modifier.type == 'DISTANCE_FROM_CAMERA': - self.draw_modifier_color_ramp_common(box, modifier, True) + draw_modifier_color_ramp_common(box, modifier, True) prop = box.operator("scene.freestyle_fill_range_by_selection") prop.type = 'COLOR' prop.name = modifier.name elif modifier.type == 'MATERIAL': row = box.row() - row.prop(modifier, "material_attribute", text="") - sub = row.column() + row.prop(modifier, "material_attribute", + text="Material Attribute") + sub = box.column() sub.prop(modifier, "use_ramp") if modifier.material_attribute in {'LINE', 'DIFF', 'SPEC'}: sub.active = True @@ -371,166 +780,292 @@ class VIEWLAYER_PT_freestyle_linestyle(ViewLayerFreestyleEditorButtonsPanel, Pan sub.active = False show_ramp = True if show_ramp: - self.draw_modifier_color_ramp_common(box, modifier, False) + draw_modifier_color_ramp_common(box, modifier, False) elif modifier.type == 'TANGENT': - self.draw_modifier_color_ramp_common(box, modifier, False) + draw_modifier_color_ramp_common(box, modifier, False) elif modifier.type == 'NOISE': - self.draw_modifier_color_ramp_common(box, modifier, False) - row = box.row(align=False) - row.prop(modifier, "amplitude") - row.prop(modifier, "period") - row.prop(modifier, "seed") + subcol = box.column(align=True) + subcol.prop(modifier, "amplitude") + subcol.prop(modifier, "period") + subcol.prop(modifier, "seed") + draw_modifier_color_ramp_common(box, modifier, False) elif modifier.type == 'CREASE_ANGLE': - self.draw_modifier_color_ramp_common(box, modifier, False) - row = box.row(align=True) - row.prop(modifier, "angle_min") - row.prop(modifier, "angle_max") + subcol = box.column(align=True) + subcol.prop(modifier, "angle_min", text="Angle Min") + subcol.prop(modifier, "angle_max", text="Max") + draw_modifier_color_ramp_common(box, modifier, False) elif modifier.type == 'CURVATURE_3D': - self.draw_modifier_color_ramp_common(box, modifier, False) - row = box.row(align=True) - row.prop(modifier, "curvature_min") - row.prop(modifier, "curvature_max") + subcol = box.column(align=True) + subcol.prop(modifier, "curvature_min", text="Curvature Min") + subcol.prop(modifier, "curvature_max", text="Max") + + draw_modifier_color_ramp_common(box, modifier, False) + freestyle = context.view_layer.freestyle_settings if not freestyle.use_smoothness: message = "Enable Face Smoothness to use this modifier" - self.draw_modifier_box_error(col.box(), modifier, message) + draw_modifier_box_error(col.box(), modifier, message) + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + lineset = view_layer.freestyle_settings.linesets.active + + layout.active = view_layer.use_freestyle + + if lineset is None: + return + linestyle = lineset.linestyle + + if linestyle is None: + return + + row = layout.row(align=True) + row.alignment = 'LEFT' + row.label(text=lineset.name, icon='LINE_DATA') + row.label(text="", icon='SMALL_TRI_RIGHT_VEC') + row.label(text=linestyle.name) + + col = layout.column() + row = col.row() + row.prop(linestyle, "color", text="Base Color") + col.operator_menu_enum("scene.freestyle_color_modifier_add", "type", text="Add Modifier") + for modifier in linestyle.color_modifiers: + self.draw_color_modifier(context, modifier) + + +class VIEWLAYER_PT_freestyle_linestyle_alpha(ViewLayerFreestyleLineStyle, Panel): + bl_label = "Freestyle Alpha" + bl_options = {'DEFAULT_CLOSED'} def draw_alpha_modifier(self, context, modifier): layout = self.layout col = layout.column(align=True) - self.draw_modifier_box_header(col.box(), modifier) + draw_modifier_box_header(col.box(), modifier) if modifier.expanded: box = col.box() - self.draw_modifier_common(box, modifier) + draw_modifier_common(box, modifier) if modifier.type == 'ALONG_STROKE': - self.draw_modifier_curve_common(box, modifier, False, False) + draw_modifier_curve_common(box, modifier, False, False) elif modifier.type == 'DISTANCE_FROM_OBJECT': box.prop(modifier, "target") - self.draw_modifier_curve_common(box, modifier, True, False) + draw_modifier_curve_common(box, modifier, True, False) prop = box.operator("scene.freestyle_fill_range_by_selection") prop.type = 'ALPHA' prop.name = modifier.name elif modifier.type == 'DISTANCE_FROM_CAMERA': - self.draw_modifier_curve_common(box, modifier, True, False) + draw_modifier_curve_common(box, modifier, True, False) prop = box.operator("scene.freestyle_fill_range_by_selection") prop.type = 'ALPHA' prop.name = modifier.name elif modifier.type == 'MATERIAL': - box.prop(modifier, "material_attribute", text="") - self.draw_modifier_curve_common(box, modifier, False, False) + box.prop(modifier, "material_attribute", text="Material Attribute") + draw_modifier_curve_common(box, modifier, False, False) elif modifier.type == 'TANGENT': - self.draw_modifier_curve_common(box, modifier, False, False) + draw_modifier_curve_common(box, modifier, False, False) elif modifier.type == 'NOISE': - self.draw_modifier_curve_common(box, modifier, False, False) - row = box.row(align=False) - row.prop(modifier, "amplitude") - row.prop(modifier, "period") - row.prop(modifier, "seed") + col = box.column(align=True) + col.prop(modifier, "amplitude") + col.prop(modifier, "period") + col.prop(modifier, "seed") + draw_modifier_curve_common(box, modifier, False, False) elif modifier.type == 'CREASE_ANGLE': - self.draw_modifier_curve_common(box, modifier, False, False) - row = box.row(align=True) - row.prop(modifier, "angle_min") - row.prop(modifier, "angle_max") + col = box.column(align=True) + col.prop(modifier, "angle_min", text="Angle Min") + col.prop(modifier, "angle_max", text="Max") + draw_modifier_curve_common(box, modifier, False, False) elif modifier.type == 'CURVATURE_3D': - self.draw_modifier_curve_common(box, modifier, False, False) - row = box.row(align=True) - row.prop(modifier, "curvature_min") - row.prop(modifier, "curvature_max") + draw_modifier_curve_common(box, modifier, False, False) + + subcol = box.column(align=True) + subcol.prop(modifier, "curvature_min", text="Curvature Min") + subcol.prop(modifier, "curvature_max", text="Max") + freestyle = context.view_layer.freestyle_settings if not freestyle.use_smoothness: message = "Enable Face Smoothness to use this modifier" - self.draw_modifier_box_error(col.box(), modifier, message) + draw_modifier_box_error(col.box(), modifier, message) + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + lineset = view_layer.freestyle_settings.linesets.active + + layout.active = view_layer.use_freestyle + + if lineset is None: + return + linestyle = lineset.linestyle + + if linestyle is None: + return + + row = layout.row(align=True) + row.alignment = 'LEFT' + row.label(text=lineset.name, icon='LINE_DATA') + row.label(text="", icon='SMALL_TRI_RIGHT_VEC') + row.label(text=linestyle.name) + + col = layout.column() + row = col.row() + row.prop(linestyle, "alpha", text="Base Transparency") + col.operator_menu_enum("scene.freestyle_alpha_modifier_add", "type", text="Add Modifier") + for modifier in linestyle.alpha_modifiers: + self.draw_alpha_modifier(context, modifier) + + +class VIEWLAYER_PT_freestyle_linestyle_thickness(ViewLayerFreestyleLineStyle, Panel): + bl_label = "Freestyle Thickness" + bl_options = {'DEFAULT_CLOSED'} def draw_thickness_modifier(self, context, modifier): layout = self.layout col = layout.column(align=True) - self.draw_modifier_box_header(col.box(), modifier) + draw_modifier_box_header(col.box(), modifier) if modifier.expanded: box = col.box() - self.draw_modifier_common(box, modifier) + draw_modifier_common(box, modifier) if modifier.type == 'ALONG_STROKE': - self.draw_modifier_curve_common(box, modifier, False, True) + draw_modifier_curve_common(box, modifier, False, True) elif modifier.type == 'DISTANCE_FROM_OBJECT': box.prop(modifier, "target") - self.draw_modifier_curve_common(box, modifier, True, True) + draw_modifier_curve_common(box, modifier, True, True) prop = box.operator("scene.freestyle_fill_range_by_selection") prop.type = 'THICKNESS' prop.name = modifier.name elif modifier.type == 'DISTANCE_FROM_CAMERA': - self.draw_modifier_curve_common(box, modifier, True, True) + draw_modifier_curve_common(box, modifier, True, True) prop = box.operator("scene.freestyle_fill_range_by_selection") prop.type = 'THICKNESS' prop.name = modifier.name elif modifier.type == 'MATERIAL': - box.prop(modifier, "material_attribute", text="") - self.draw_modifier_curve_common(box, modifier, False, True) + box.prop(modifier, "material_attribute", text="Material Attribute") + draw_modifier_curve_common(box, modifier, False, True) elif modifier.type == 'CALLIGRAPHY': box.prop(modifier, "orientation") - row = box.row(align=True) - row.prop(modifier, "thickness_min") - row.prop(modifier, "thickness_max") + subcol = box.column(align=True) + subcol.prop(modifier, "thickness_min", text="Thickness Min") + subcol.prop(modifier, "thickness_max", text="Max") elif modifier.type == 'TANGENT': - self.draw_modifier_curve_common(box, modifier, False, False) self.mapping = 'CURVE' - row = box.row(align=True) - row.prop(modifier, "thickness_min") - row.prop(modifier, "thickness_max") + subcol = box.column(align=True) + subcol.prop(modifier, "thickness_min", text="Thickness Min") + subcol.prop(modifier, "thickness_max", text="Max") + + draw_modifier_curve_common(box, modifier, False, False) elif modifier.type == 'NOISE': - row = box.row(align=False) - row.prop(modifier, "amplitude") - row.prop(modifier, "period") - row = box.row(align=False) - row.prop(modifier, "seed") - row.prop(modifier, "use_asymmetric") + col = box.column(align=True) + col.prop(modifier, "amplitude") + col.prop(modifier, "period") + + col = box.column(align=True) + col.prop(modifier, "seed") + col.prop(modifier, "use_asymmetric") elif modifier.type == 'CREASE_ANGLE': - self.draw_modifier_curve_common(box, modifier, False, False) - row = box.row(align=True) - row.prop(modifier, "thickness_min") - row.prop(modifier, "thickness_max") - row = box.row(align=True) - row.prop(modifier, "angle_min") - row.prop(modifier, "angle_max") + col = box.column(align=True) + col.prop(modifier, "thickness_min", text="Thickness Min") + col.prop(modifier, "thickness_max", text="Max") + + col = box.column(align=True) + col.prop(modifier, "angle_min", text="Angle Min") + col.prop(modifier, "angle_max", text="Max") + + draw_modifier_curve_common(box, modifier, False, False) elif modifier.type == 'CURVATURE_3D': - self.draw_modifier_curve_common(box, modifier, False, False) - row = box.row(align=True) - row.prop(modifier, "thickness_min") - row.prop(modifier, "thickness_max") - row = box.row(align=True) - row.prop(modifier, "curvature_min") - row.prop(modifier, "curvature_max") + subcol = box.column(align=True) + subcol.prop(modifier, "thickness_min", text="Thickness Min") + subcol.prop(modifier, "thickness_max", text="Max") + + subcol = box.column(align=True) + subcol.prop(modifier, "curvature_min") + subcol.prop(modifier, "curvature_max") + + draw_modifier_curve_common(box, modifier, False, False) + freestyle = context.view_layer.freestyle_settings if not freestyle.use_smoothness: message = "Enable Face Smoothness to use this modifier" - self.draw_modifier_box_error(col.box(), modifier, message) + draw_modifier_box_error(col.box(), modifier, message) + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + view_layer = context.view_layer + lineset = view_layer.freestyle_settings.linesets.active + + layout.active = view_layer.use_freestyle + + if lineset is None: + return + linestyle = lineset.linestyle + + if linestyle is None: + return + + row = layout.row(align=True) + row.alignment = 'LEFT' + row.label(text=lineset.name, icon='LINE_DATA') + row.label(text="", icon='SMALL_TRI_RIGHT_VEC') + row.label(text=linestyle.name) + + col = layout.column() + row = col.row() + row.prop(linestyle, "thickness", text="Base Thickness") + subcol = col.column() + subcol.active = linestyle.chaining == 'PLAIN' and linestyle.use_same_object + row = subcol.row() + row.prop(linestyle, "thickness_position", expand=False) + + if linestyle.thickness_position == 'RELATIVE': + row = subcol.row() + row.prop(linestyle, "thickness_ratio") + + col = layout.column() + col.operator_menu_enum("scene.freestyle_thickness_modifier_add", "type", text="Add Modifier") + for modifier in linestyle.thickness_modifiers: + self.draw_thickness_modifier(context, modifier) + + +class VIEWLAYER_PT_freestyle_linestyle_geometry(ViewLayerFreestyleLineStyle, Panel): + bl_label = "Freestyle Geometry" + bl_options = {'DEFAULT_CLOSED'} def draw_geometry_modifier(self, _context, modifier): layout = self.layout col = layout.column(align=True) - self.draw_modifier_box_header(col.box(), modifier) + draw_modifier_box_header(col.box(), modifier) if modifier.expanded: box = col.box() @@ -541,40 +1076,40 @@ class VIEWLAYER_PT_freestyle_linestyle(ViewLayerFreestyleEditorButtonsPanel, Pan box.prop(modifier, "error") elif modifier.type == 'SINUS_DISPLACEMENT': - split = box.split() - col = split.column() + col = box.column(align=True) col.prop(modifier, "wavelength") col.prop(modifier, "amplitude") - col = split.column() + + col = box.column(align=True) col.prop(modifier, "phase") elif modifier.type == 'SPATIAL_NOISE': - split = box.split() - col = split.column() + col = box.column(align=True) col.prop(modifier, "amplitude") col.prop(modifier, "scale") col.prop(modifier, "octaves") - col = split.column() + + col = box.column(align=True) col.prop(modifier, "smooth") col.prop(modifier, "use_pure_random") elif modifier.type == 'PERLIN_NOISE_1D': - split = box.split() - col = split.column() + col = box.column(align=True) col.prop(modifier, "frequency") col.prop(modifier, "amplitude") col.prop(modifier, "seed") - col = split.column() + + col = box.column(align=True) col.prop(modifier, "octaves") col.prop(modifier, "angle") elif modifier.type == 'PERLIN_NOISE_2D': - split = box.split() - col = split.column() + col = box.column(align=True) col.prop(modifier, "frequency") col.prop(modifier, "amplitude") col.prop(modifier, "seed") - col = split.column() + + col = box.column(align=True) col.prop(modifier, "octaves") col.prop(modifier, "angle") @@ -594,33 +1129,34 @@ class VIEWLAYER_PT_freestyle_linestyle(ViewLayerFreestyleEditorButtonsPanel, Pan row = box.row() row.prop(modifier, "shape", expand=True) box.prop(modifier, "rounds") - row = box.row() + subcol = box.column(align=True) if modifier.shape in {'CIRCLES', 'ELLIPSES'}: - row.prop(modifier, "random_radius") - row.prop(modifier, "random_center") + subcol.prop(modifier, "random_radius", text="Random Radius") + subcol.prop(modifier, "random_center", text="Center") elif modifier.shape == 'SQUARES': - row.prop(modifier, "backbone_length") - row.prop(modifier, "random_backbone") + subcol.prop(modifier, "backbone_length", text="Backbone Length") + subcol.prop(modifier, "random_backbone", text="Randomness") elif modifier.type == '2D_OFFSET': - row = box.row(align=True) - row.prop(modifier, "start") - row.prop(modifier, "end") - row = box.row(align=True) - row.prop(modifier, "x") - row.prop(modifier, "y") + subcol = box.column(align=True) + subcol.prop(modifier, "start") + subcol.prop(modifier, "end") + + subcol = box.column(align=True) + subcol.prop(modifier, "x") + subcol.prop(modifier, "y") elif modifier.type == '2D_TRANSFORM': box.prop(modifier, "pivot") if modifier.pivot == 'PARAM': box.prop(modifier, "pivot_u") elif modifier.pivot == 'ABSOLUTE': - row = box.row(align=True) - row.prop(modifier, "pivot_x") - row.prop(modifier, "pivot_y") - row = box.row(align=True) - row.prop(modifier, "scale_x") - row.prop(modifier, "scale_y") + subcol = box.column(align=True) + subcol.prop(modifier, "pivot_x", text="Pivot X") + subcol.prop(modifier, "pivot_y", text="Y") + subcol = box.column(align=True) + subcol.prop(modifier, "scale_x", text="Scale X") + subcol.prop(modifier, "scale_y", text="Y") box.prop(modifier, "angle") elif modifier.type == 'SIMPLIFICATION': @@ -628,6 +1164,8 @@ class VIEWLAYER_PT_freestyle_linestyle(ViewLayerFreestyleEditorButtonsPanel, Pan def draw(self, context): layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False view_layer = context.view_layer lineset = view_layer.freestyle_settings.linesets.active @@ -638,181 +1176,61 @@ class VIEWLAYER_PT_freestyle_linestyle(ViewLayerFreestyleEditorButtonsPanel, Pan return linestyle = lineset.linestyle - layout.template_ID(lineset, "linestyle", new="scene.freestyle_linestyle_new") if linestyle is None: return + row = layout.row(align=True) - row.prop(linestyle, "panel", expand=True) - if linestyle.panel == 'STROKES': - # Chaining - layout.prop(linestyle, "use_chaining", text="Chaining:") - split = layout.split(align=True) - split.active = linestyle.use_chaining - # First column - col = split.column() - col.active = linestyle.use_chaining - col.prop(linestyle, "chaining", text="") - if linestyle.chaining == 'SKETCHY': - col.prop(linestyle, "rounds") - # Second column - col = split.column() - col.prop(linestyle, "use_same_object") - - # Splitting - layout.label(text="Splitting:") - split = layout.split(align=True) - # First column - col = split.column() - row = col.row(align=True) - row.prop(linestyle, "use_angle_min", text="") - sub = row.row() - sub.active = linestyle.use_angle_min - sub.prop(linestyle, "angle_min") - row = col.row(align=True) - row.prop(linestyle, "use_angle_max", text="") - sub = row.row() - sub.active = linestyle.use_angle_max - sub.prop(linestyle, "angle_max") - # Second column - col = split.column() - row = col.row(align=True) - row.prop(linestyle, "use_split_length", text="") - sub = row.row() - sub.active = linestyle.use_split_length - sub.prop(linestyle, "split_length", text="2D Length") - row = col.row(align=True) - row.prop(linestyle, "material_boundary") - # End of columns - row = layout.row(align=True) - row.prop(linestyle, "use_split_pattern", text="") - sub = row.row(align=True) - sub.active = linestyle.use_split_pattern - sub.prop(linestyle, "split_dash1", text="D1") - sub.prop(linestyle, "split_gap1", text="G1") - sub.prop(linestyle, "split_dash2", text="D2") - sub.prop(linestyle, "split_gap2", text="G2") - sub.prop(linestyle, "split_dash3", text="D3") - sub.prop(linestyle, "split_gap3", text="G3") - - # Sorting - layout.prop(linestyle, "use_sorting", text="Sorting:") - col = layout.column() - col.active = linestyle.use_sorting - row = col.row(align=True) - row.prop(linestyle, "sort_key", text="") - sub = row.row() - sub.active = linestyle.sort_key in {'DISTANCE_FROM_CAMERA', - 'PROJECTED_X', - 'PROJECTED_Y'} - sub.prop(linestyle, "integration_type", text="") - row = col.row(align=True) - row.prop(linestyle, "sort_order", expand=True) - - # Selection - layout.label(text="Selection:") - split = layout.split(align=True) - # First column - col = split.column() - row = col.row(align=True) - row.prop(linestyle, "use_length_min", text="") - sub = row.row() - sub.active = linestyle.use_length_min - sub.prop(linestyle, "length_min") - row = col.row(align=True) - row.prop(linestyle, "use_length_max", text="") - sub = row.row() - sub.active = linestyle.use_length_max - sub.prop(linestyle, "length_max") - # Second column - col = split.column() - row = col.row(align=True) - row.prop(linestyle, "use_chain_count", text="") - sub = row.row() - sub.active = linestyle.use_chain_count - sub.prop(linestyle, "chain_count") - - # Caps - layout.label(text="Caps:") - row = layout.row(align=True) - row.prop(linestyle, "caps", expand=True) - - # Dashed lines - layout.prop(linestyle, "use_dashed_line", text="Dashed Line:") - row = layout.row(align=True) - row.active = linestyle.use_dashed_line - row.prop(linestyle, "dash1", text="D1") - row.prop(linestyle, "gap1", text="G1") - row.prop(linestyle, "dash2", text="D2") - row.prop(linestyle, "gap2", text="G2") - row.prop(linestyle, "dash3", text="D3") - row.prop(linestyle, "gap3", text="G3") - - elif linestyle.panel == 'COLOR': - col = layout.column() - row = col.row() - row.label(text="Base Color:") - row.prop(linestyle, "color", text="") - col.label(text="Modifiers:") - col.operator_menu_enum("scene.freestyle_color_modifier_add", "type", text="Add Modifier") - for modifier in linestyle.color_modifiers: - self.draw_color_modifier(context, modifier) - - elif linestyle.panel == 'ALPHA': - col = layout.column() - row = col.row() - row.label(text="Base Transparency:") - row.prop(linestyle, "alpha") - col.label(text="Modifiers:") - col.operator_menu_enum("scene.freestyle_alpha_modifier_add", "type", text="Add Modifier") - for modifier in linestyle.alpha_modifiers: - self.draw_alpha_modifier(context, modifier) - - elif linestyle.panel == 'THICKNESS': - col = layout.column() - row = col.row() - row.label(text="Base Thickness:") - row.prop(linestyle, "thickness") - subcol = col.column() - subcol.active = linestyle.chaining == 'PLAIN' and linestyle.use_same_object - row = subcol.row() - row.prop(linestyle, "thickness_position", expand=True) - row = subcol.row() - row.prop(linestyle, "thickness_ratio") - row.active = (linestyle.thickness_position == 'RELATIVE') - col = layout.column() - col.label(text="Modifiers:") - col.operator_menu_enum("scene.freestyle_thickness_modifier_add", "type", text="Add Modifier") - for modifier in linestyle.thickness_modifiers: - self.draw_thickness_modifier(context, modifier) - - elif linestyle.panel == 'GEOMETRY': - col = layout.column() - col.label(text="Modifiers:") - col.operator_menu_enum("scene.freestyle_geometry_modifier_add", "type", text="Add Modifier") - for modifier in linestyle.geometry_modifiers: - self.draw_geometry_modifier(context, modifier) - - elif linestyle.panel == 'TEXTURE': - layout.separator() + row.alignment = 'LEFT' + row.label(text=lineset.name, icon='LINE_DATA') + row.label(text="", icon='SMALL_TRI_RIGHT_VEC') + row.label(text=linestyle.name) - row = layout.row() - row.prop(linestyle, "use_nodes") - row.prop(linestyle, "texture_spacing", text="Spacing Along Stroke") + col = layout.column() + col.operator_menu_enum("scene.freestyle_geometry_modifier_add", "type", text="Add Modifier") + for modifier in linestyle.geometry_modifiers: + self.draw_geometry_modifier(context, modifier) - row = layout.row() - props = row.operator( - "wm.properties_context_change", - text="Go to Linestyle Textures Properties", - icon='TEXTURE', - ) - props.context = 'TEXTURE' - elif linestyle.panel == 'MISC': - pass +class VIEWLAYER_PT_freestyle_linestyle_texture(ViewLayerFreestyleLineStyle, Panel): + bl_label = "Freestyle Texture" + bl_options = {'DEFAULT_CLOSED'} + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False -# Material properties + view_layer = context.view_layer + lineset = view_layer.freestyle_settings.linesets.active + layout.active = view_layer.use_freestyle + + if lineset is None: + return + linestyle = lineset.linestyle + + if linestyle is None: + return + + row = layout.row(align=True) + row.alignment = 'LEFT' + row.label(text=lineset.name, icon='LINE_DATA') + row.label(text="", icon='SMALL_TRI_RIGHT_VEC') + row.label(text=linestyle.name) + + layout.prop(linestyle, "use_nodes") + layout.prop(linestyle, "texture_spacing", text="Spacing Along Stroke") + + row = layout.row() + props = row.operator( + "wm.properties_context_change", + text="Go to Linestyle Textures Properties", + icon='TEXTURE', + ) + props.context = 'TEXTURE' + + +# Material properties class MaterialFreestyleButtonsPanel: bl_space_type = 'PROPERTIES' bl_region_type = 'WINDOW' @@ -825,8 +1243,11 @@ class MaterialFreestyleButtonsPanel: material = context.material with_freestyle = bpy.app.build_options.freestyle return ( - with_freestyle and material and scene and scene.render.use_freestyle and - (context.engine in cls.COMPAT_ENGINES) + with_freestyle + and material + and scene + and scene.render.use_freestyle + and (context.engine in cls.COMPAT_ENGINES) ) @@ -837,12 +1258,14 @@ class MATERIAL_PT_freestyle_line(MaterialFreestyleButtonsPanel, Panel): def draw(self, context): layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False mat = context.material - row = layout.row() - row.prop(mat, "line_color", text="") - row.prop(mat, "line_priority", text="Priority") + col = layout.column() + col.prop(mat, "line_color") + col.prop(mat, "line_priority", text="Priority") classes = ( @@ -850,12 +1273,30 @@ classes = ( VIEWLAYER_UL_linesets, RENDER_MT_lineset_context_menu, VIEWLAYER_PT_freestyle, + VIEWLAYER_PT_freestyle_edge_detection, + VIEWLAYER_PT_freestyle_style_modules, VIEWLAYER_PT_freestyle_lineset, - VIEWLAYER_PT_freestyle_linestyle, + VIEWLAYER_PT_freestyle_lineset_visibilty, + VIEWLAYER_PT_freestyle_lineset_edgetype, + VIEWLAYER_PT_freestyle_lineset_facemarks, + VIEWLAYER_PT_freestyle_lineset_collection, + VIEWLAYER_PT_freestyle_linestyle_strokes, + VIEWLAYER_PT_freestyle_linestyle_strokes_chaining, + VIEWLAYER_PT_freestyle_linestyle_strokes_splitting, + VIEWLAYER_PT_freestyle_linestyle_strokes_splitting_pattern, + VIEWLAYER_PT_freestyle_linestyle_strokes_sorting, + VIEWLAYER_PT_freestyle_linestyle_strokes_selection, + VIEWLAYER_PT_freestyle_linestyle_strokes_dashedline, + VIEWLAYER_PT_freestyle_linestyle_color, + VIEWLAYER_PT_freestyle_linestyle_alpha, + VIEWLAYER_PT_freestyle_linestyle_thickness, + VIEWLAYER_PT_freestyle_linestyle_geometry, + VIEWLAYER_PT_freestyle_linestyle_texture, MATERIAL_PT_freestyle_line, ) if __name__ == "__main__": # only for live edit. from bpy.utils import register_class + for cls in classes: register_class(cls) 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 f87f5351d6d..f01e75dbab8 100644 --- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py +++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py @@ -85,9 +85,6 @@ class GreasePencilSculptOptionsPanel: layout.prop(gp_settings, "use_edit_strength", text="Affect Strength") layout.prop(gp_settings, "use_edit_thickness", text="Affect Thickness") - if tool == 'SMOOTH': - layout.prop(gp_settings, "use_edit_pressure") - layout.prop(gp_settings, "use_edit_uv", text="Affect UV") diff --git a/release/scripts/startup/bl_ui/properties_object.py b/release/scripts/startup/bl_ui/properties_object.py index 52af4fafd09..81a641a20cf 100644 --- a/release/scripts/startup/bl_ui/properties_object.py +++ b/release/scripts/startup/bl_ui/properties_object.py @@ -267,7 +267,8 @@ class OBJECT_PT_instancing(ObjectButtonsPanel, Panel): @classmethod def poll(cls, context): ob = context.object - return (ob.type in {'MESH', 'EMPTY', 'POINTCLOUD'}) + # FONT objects need (vertex) instancing for the 'Object Font' feature + return (ob.type in {'MESH', 'EMPTY', 'POINTCLOUD', 'FONT'}) def draw(self, context): layout = self.layout diff --git a/release/scripts/startup/bl_ui/properties_output.py b/release/scripts/startup/bl_ui/properties_output.py index 0c1a26ceec1..d96a53f6ab8 100644 --- a/release/scripts/startup/bl_ui/properties_output.py +++ b/release/scripts/startup/bl_ui/properties_output.py @@ -25,8 +25,8 @@ from bl_ui.utils import PresetPanel from bpy.app.translations import pgettext_tip as tip_ -class RENDER_PT_presets(PresetPanel, Panel): - bl_label = "Render Presets" +class RENDER_PT_format_presets(PresetPanel, Panel): + bl_label = "Format Presets" preset_subdir = "render" preset_operator = "script.execute_preset" preset_add_operator = "render.preset_add" @@ -56,21 +56,21 @@ class RenderOutputButtonsPanel: return (context.engine in cls.COMPAT_ENGINES) -class RENDER_PT_dimensions(RenderOutputButtonsPanel, Panel): - bl_label = "Dimensions" +class RENDER_PT_format(RenderOutputButtonsPanel, Panel): + bl_label = "Format" COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'} _frame_rate_args_prev = None _preset_class = None def draw_header_preset(self, _context): - RENDER_PT_presets.draw_panel_header(self.layout) + RENDER_PT_format_presets.draw_panel_header(self.layout) @staticmethod def _draw_framerate_label(*args): # avoids re-creating text string each draw - if RENDER_PT_dimensions._frame_rate_args_prev == args: - return RENDER_PT_dimensions._frame_rate_ret + if RENDER_PT_format._frame_rate_args_prev == args: + return RENDER_PT_format._frame_rate_ret fps, fps_base, preset_label = args @@ -89,17 +89,17 @@ class RENDER_PT_dimensions(RenderOutputButtonsPanel, Panel): fps_label_text = tip_("%.4g fps") % fps_rate show_framerate = (preset_label == "Custom") - RENDER_PT_dimensions._frame_rate_args_prev = args - RENDER_PT_dimensions._frame_rate_ret = args = (fps_label_text, show_framerate) + RENDER_PT_format._frame_rate_args_prev = args + RENDER_PT_format._frame_rate_ret = args = (fps_label_text, show_framerate) return args @staticmethod def draw_framerate(layout, rd): - if RENDER_PT_dimensions._preset_class is None: - RENDER_PT_dimensions._preset_class = bpy.types.RENDER_MT_framerate_presets + if RENDER_PT_format._preset_class is None: + RENDER_PT_format._preset_class = bpy.types.RENDER_MT_framerate_presets - args = rd.fps, rd.fps_base, RENDER_PT_dimensions._preset_class.bl_label - fps_label_text, show_framerate = RENDER_PT_dimensions._draw_framerate_label(*args) + args = rd.fps, rd.fps_base, RENDER_PT_format._preset_class.bl_label + fps_label_text, show_framerate = RENDER_PT_format._draw_framerate_label(*args) layout.menu("RENDER_MT_framerate_presets", text=fps_label_text) @@ -113,8 +113,7 @@ class RENDER_PT_dimensions(RenderOutputButtonsPanel, Panel): layout.use_property_split = True layout.use_property_decorate = False # No animation. - scene = context.scene - rd = scene.render + rd = context.scene.render col = layout.column(align=True) col.prop(rd, "resolution_x", text="Resolution X") @@ -131,18 +130,30 @@ class RENDER_PT_dimensions(RenderOutputButtonsPanel, Panel): sub.active = rd.use_border sub.prop(rd, "use_crop_to_border") + col = layout.column(heading="Frame Rate") + self.draw_framerate(col, rd) + + +class RENDER_PT_frame_range(RenderOutputButtonsPanel, Panel): + bl_label = "Frame Range" + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'} + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False # No animation. + + scene = context.scene + col = layout.column(align=True) col.prop(scene, "frame_start", text="Frame Start") col.prop(scene, "frame_end", text="End") col.prop(scene, "frame_step", text="Step") - col = layout.column(heading="Frame Rate") - self.draw_framerate(col, rd) - -class RENDER_PT_frame_remapping(RenderOutputButtonsPanel, Panel): - bl_label = "Time Remapping" - bl_parent_id = "RENDER_PT_dimensions" +class RENDER_PT_time_stretching(RenderOutputButtonsPanel, Panel): + bl_label = "Time Stretching" + bl_parent_id = "RENDER_PT_frame_range" bl_options = {'DEFAULT_CLOSED'} COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'} @@ -481,11 +492,12 @@ class RENDER_PT_stereoscopy(RenderOutputButtonsPanel, Panel): classes = ( - RENDER_PT_presets, + RENDER_PT_format_presets, RENDER_PT_ffmpeg_presets, RENDER_MT_framerate_presets, - RENDER_PT_dimensions, - RENDER_PT_frame_remapping, + RENDER_PT_format, + RENDER_PT_frame_range, + RENDER_PT_time_stretching, RENDER_PT_stereoscopy, RENDER_PT_output, RENDER_PT_output_views, diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py index ca018216a5a..8ba82a7d407 100644 --- a/release/scripts/startup/bl_ui/space_filebrowser.py +++ b/release/scripts/startup/bl_ui/space_filebrowser.py @@ -267,7 +267,7 @@ class FILEBROWSER_PT_bookmarks_system(Panel): @classmethod def poll(cls, context): return ( - not context.preferences.filepaths.hide_system_bookmarks and + context.preferences.filepaths.show_system_bookmarks and panel_poll_is_upper_region(context.region) and not panel_poll_is_asset_browsing(context) ) @@ -345,7 +345,7 @@ class FILEBROWSER_PT_bookmarks_recents(Panel): @classmethod def poll(cls, context): return ( - not context.preferences.filepaths.hide_recent_locations and + context.preferences.filepaths.show_recent_locations and panel_poll_is_upper_region(context.region) and not panel_poll_is_asset_browsing(context) ) diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py index dcb0ab2e9e5..3ee668888f3 100644 --- a/release/scripts/startup/bl_ui/space_image.py +++ b/release/scripts/startup/bl_ui/space_image.py @@ -1453,7 +1453,7 @@ class IMAGE_PT_udim_grid(Panel): def poll(cls, context): sima = context.space_data - return sima.show_uvedit and sima.image is None + return sima.show_uvedit def draw(self, context): layout = self.layout diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index 30115618f3d..258797c18da 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -191,16 +191,6 @@ class SEQUENCER_PT_overlay(Panel): pass -class SEQUENCER_PT_overlay(Panel): - bl_space_type = 'SEQUENCE_EDITOR' - bl_region_type = 'HEADER' - bl_label = "Overlays" - bl_ui_units_x = 7 - - def draw(self, _context): - pass - - class SEQUENCER_PT_preview_overlay(Panel): bl_space_type = 'SEQUENCE_EDITOR' bl_region_type = 'HEADER' @@ -1659,7 +1649,7 @@ class SEQUENCER_PT_adjust_sound(SequencerButtonsPanel, Panel): def draw(self, context): layout = self.layout - layout.use_property_split = True + layout.use_property_split = False st = context.space_data strip = context.active_sequence_strip @@ -1667,20 +1657,39 @@ class SEQUENCER_PT_adjust_sound(SequencerButtonsPanel, Panel): layout.active = not strip.mute - col = layout.column() - - col.prop(strip, "volume", text="Volume") - col.prop(strip, "pitch") - - col = layout.column() - col.prop(strip, "pan") - col.enabled = sound is not None and sound.use_mono - if sound is not None: col = layout.column() + + split = col.split(factor=0.4) + split.label(text="") + split.prop(sound, "use_mono") if st.waveform_display_type == 'DEFAULT_WAVEFORMS': - col.prop(strip, "show_waveform") - col.prop(sound, "use_mono") + split = col.split(factor=0.4) + split.label(text="") + split.prop(strip, "show_waveform") + + col = layout.column() + + split = col.split(factor=0.4) + split.alignment = 'RIGHT' + split.label(text="Volume") + split.prop(strip, "volume", text="") + + split = col.split(factor=0.4) + split.alignment = 'RIGHT' + split.label(text="Pitch") + split.prop(strip, "pitch", text="") + + split = col.split(factor=0.4) + split.alignment = 'RIGHT' + split.label(text="Pan") + audio_channels = context.scene.render.ffmpeg.audio_channels + pan_text = "" + if audio_channels != 'MONO' and audio_channels != 'STEREO': + pan_text = "%.2f°" % (strip.pan * 90) + split.prop(strip, "pan", text=pan_text) + split.enabled = sound.use_mono and audio_channels != 'MONO' + class SEQUENCER_PT_adjust_comp(SequencerButtonsPanel, Panel): diff --git a/release/scripts/startup/bl_ui/space_topbar.py b/release/scripts/startup/bl_ui/space_topbar.py index bacca6dedc2..b409e9079be 100644 --- a/release/scripts/startup/bl_ui/space_topbar.py +++ b/release/scripts/startup/bl_ui/space_topbar.py @@ -209,9 +209,9 @@ class TOPBAR_MT_editor_menus(Menu): # Allow calling this menu directly (this might not be a header area). if getattr(context.area, "show_menus", False): - layout.menu("TOPBAR_MT_app", text="", icon='BLENDER') + layout.menu("TOPBAR_MT_blender", text="", icon='BLENDER') else: - layout.menu("TOPBAR_MT_app", text="Blender") + layout.menu("TOPBAR_MT_blender", text="Blender") layout.menu("TOPBAR_MT_file") layout.menu("TOPBAR_MT_edit") @@ -222,7 +222,7 @@ class TOPBAR_MT_editor_menus(Menu): layout.menu("TOPBAR_MT_help") -class TOPBAR_MT_app(Menu): +class TOPBAR_MT_blender(Menu): bl_label = "Blender" def draw(self, _context): @@ -238,7 +238,7 @@ class TOPBAR_MT_app(Menu): layout.separator() - layout.menu("TOPBAR_MT_app_system") + layout.menu("TOPBAR_MT_blender_system") class TOPBAR_MT_file_cleanup(Menu): @@ -430,7 +430,7 @@ class TOPBAR_MT_file_defaults(Menu): # Include technical operators here which would otherwise have no way for users to access. -class TOPBAR_MT_app_system(Menu): +class TOPBAR_MT_blender_system(Menu): bl_label = "System" def draw(self, _context): @@ -854,8 +854,8 @@ classes = ( TOPBAR_MT_file_context_menu, TOPBAR_MT_workspace_menu, TOPBAR_MT_editor_menus, - TOPBAR_MT_app, - TOPBAR_MT_app_system, + TOPBAR_MT_blender, + TOPBAR_MT_blender_system, TOPBAR_MT_file, TOPBAR_MT_file_new, TOPBAR_MT_file_recover, diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index 1130c3b80e6..be16179fdff 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -267,7 +267,6 @@ class USERPREF_PT_interface_editors(InterfacePanel, CenterAlignMixIn, Panel): col = layout.column() col.prop(system, "use_region_overlap") - col.prop(view, "show_layout_ui", text="Corner Splitting") col.prop(view, "show_navigate_ui") col.prop(view, "color_picker_type") col.row().prop(view, "header_align") @@ -1414,7 +1413,7 @@ class USERPREF_PT_saveload_blend(SaveLoadPanel, CenterAlignMixIn, Panel): col = layout.column(heading="Save") col.prop(view, "use_save_prompt") - col.prop(paths, "use_save_preview_images") + col.prop(paths, "file_preview_type") col = layout.column(heading="Default To") col.prop(paths, "use_relative_paths") @@ -1455,13 +1454,11 @@ class USERPREF_PT_saveload_file_browser(SaveLoadPanel, CenterAlignMixIn, Panel): prefs = context.preferences paths = prefs.filepaths - col = layout.column() + col = layout.column(heading="Defaults") col.prop(paths, "use_filter_files") - - col = layout.column(heading="Hide") - col.prop(paths, "show_hidden_files_datablocks", text="Dot File & Data-Blocks") - col.prop(paths, "hide_recent_locations", text="Recent Locations") - col.prop(paths, "hide_system_bookmarks", text="System Bookmarks") + col.prop(paths, "show_hidden_files_datablocks") + col.prop(paths, "show_recent_locations") + col.prop(paths, "show_system_bookmarks") # ----------------------------------------------------------------------------- @@ -2255,6 +2252,7 @@ class USERPREF_PT_experimental_new_features(ExperimentalPanel, Panel): ({"property": "use_sculpt_tools_tilt"}, "T82877"), ({"property": "use_extended_asset_browser"}, ("project/view/130/", "Project Page")), ({"property": "use_override_templates"}, ("T73318", "Milestone 4")), + ({"property": "use_geometry_nodes_fields"}, "T91274"), ), ) diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py index d78023b4e0e..569c5291576 100644 --- a/release/scripts/startup/nodeitems_builtins.py +++ b/release/scripts/startup/nodeitems_builtins.py @@ -180,6 +180,13 @@ def object_eevee_cycles_shader_nodes_poll(context): eevee_cycles_shader_nodes_poll(context)) +def geometry_nodes_fields_poll(context): + return context.preferences.experimental.use_geometry_nodes_fields + +def geometry_nodes_fields_legacy_poll(context): + return not context.preferences.experimental.use_geometry_nodes_fields + + # All standard node categories currently used in nodes. shader_node_categories = [ @@ -333,6 +340,7 @@ compositor_node_categories = [ NodeItem("CompositorNodeGamma"), NodeItem("CompositorNodeExposure"), NodeItem("CompositorNodeColorCorrection"), + NodeItem("CompositorNodePosterize"), NodeItem("CompositorNodeTonemap"), NodeItem("CompositorNodeZcombine"), ]), @@ -475,24 +483,26 @@ texture_node_categories = [ geometry_node_categories = [ # Geometry Nodes GeometryNodeCategory("GEO_ATTRIBUTE", "Attribute", items=[ - NodeItem("GeometryNodeAttributeRandomize"), - NodeItem("GeometryNodeAttributeMath"), - NodeItem("GeometryNodeAttributeClamp"), - NodeItem("GeometryNodeAttributeCompare"), - NodeItem("GeometryNodeAttributeConvert"), - NodeItem("GeometryNodeAttributeCurveMap"), - NodeItem("GeometryNodeAttributeFill"), - NodeItem("GeometryNodeAttributeMix"), - NodeItem("GeometryNodeAttributeProximity"), - NodeItem("GeometryNodeAttributeColorRamp"), - NodeItem("GeometryNodeAttributeVectorMath"), - NodeItem("GeometryNodeAttributeVectorRotate"), - NodeItem("GeometryNodeAttributeSampleTexture"), - NodeItem("GeometryNodeAttributeCombineXYZ"), - NodeItem("GeometryNodeAttributeSeparateXYZ"), + NodeItem("GeometryNodeLegacyAttributeRandomize", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeMath", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeClamp", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeCompare", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeConvert", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeCurveMap", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeFill", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeMix", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeProximity", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeColorRamp", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeVectorMath", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeVectorRotate", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeSampleTexture", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeCombineXYZ", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeSeparateXYZ", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeMapRange", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAttributeTransfer", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeAttributeRemove"), - NodeItem("GeometryNodeAttributeMapRange"), - NodeItem("GeometryNodeAttributeTransfer"), + NodeItem("GeometryNodeAttributeCapture", poll=geometry_nodes_fields_poll), ]), GeometryNodeCategory("GEO_COLOR", "Color", items=[ NodeItem("ShaderNodeMixRGB"), @@ -502,19 +512,20 @@ geometry_node_categories = [ NodeItem("ShaderNodeCombineRGB"), ]), GeometryNodeCategory("GEO_CURVE", "Curve", items=[ - NodeItem("GeometryNodeCurveSubdivide"), + NodeItem("GeometryNodeLegacyCurveSubdivide", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyCurveReverse", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyCurveSplineType", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyCurveSetHandles", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyCurveSelectHandles", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyMeshToCurve", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeCurveToMesh"), NodeItem("GeometryNodeCurveResample"), - NodeItem("GeometryNodeMeshToCurve"), NodeItem("GeometryNodeCurveToPoints"), NodeItem("GeometryNodeCurveEndpoints"), NodeItem("GeometryNodeCurveFill"), NodeItem("GeometryNodeCurveTrim"), NodeItem("GeometryNodeCurveLength"), - NodeItem("GeometryNodeCurveReverse"), - NodeItem("GeometryNodeCurveSplineType"), - NodeItem("GeometryNodeCurveSetHandles"), - NodeItem("GeometryNodeCurveSelectHandles"), ]), GeometryNodeCategory("GEO_PRIMITIVES_CURVE", "Curve Primitives", items=[ NodeItem("GeometryNodeCurvePrimitiveLine"), @@ -526,13 +537,15 @@ geometry_node_categories = [ NodeItem("GeometryNodeCurvePrimitiveBezierSegment"), ]), GeometryNodeCategory("GEO_GEOMETRY", "Geometry", items=[ + NodeItem("GeometryNodeLegacyDeleteGeometry", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyRaycast", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeBoundBox"), NodeItem("GeometryNodeConvexHull"), - NodeItem("GeometryNodeDeleteGeometry"), NodeItem("GeometryNodeTransform"), NodeItem("GeometryNodeJoinGeometry"), NodeItem("GeometryNodeSeparateComponents"), - NodeItem("GeometryNodeRaycast"), + NodeItem("GeometryNodeSetPosition", poll=geometry_nodes_fields_poll), ]), GeometryNodeCategory("GEO_INPUT", "Input", items=[ NodeItem("GeometryNodeObjectInfo"), @@ -543,10 +556,16 @@ geometry_node_categories = [ NodeItem("FunctionNodeInputVector"), NodeItem("GeometryNodeInputMaterial"), NodeItem("GeometryNodeIsViewport"), + NodeItem("GeometryNodeInputPosition", poll=geometry_nodes_fields_poll), + NodeItem("GeometryNodeInputIndex", poll=geometry_nodes_fields_poll), + NodeItem("GeometryNodeInputNormal", poll=geometry_nodes_fields_poll), ]), GeometryNodeCategory("GEO_MATERIAL", "Material", items=[ - NodeItem("GeometryNodeMaterialAssign"), - NodeItem("GeometryNodeSelectByMaterial"), + NodeItem("GeometryNodeLegacyMaterialAssign", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacySelectByMaterial", poll=geometry_nodes_fields_legacy_poll), + + NodeItem("GeometryNodeMaterialAssign", poll=geometry_nodes_fields_poll), + NodeItem("GeometryNodeMaterialSelection", poll=geometry_nodes_fields_poll), NodeItem("GeometryNodeMaterialReplace"), ]), GeometryNodeCategory("GEO_MESH", "Mesh", items=[ @@ -566,15 +585,14 @@ geometry_node_categories = [ NodeItem("GeometryNodeMeshLine"), NodeItem("GeometryNodeMeshUVSphere"), ]), - GeometryNodeCategory("GEO_POINT", "Point", items=[ - NodeItem("GeometryNodePointDistribute"), - NodeItem("GeometryNodePointInstance"), - NodeItem("GeometryNodePointSeparate"), - NodeItem("GeometryNodePointScale"), - NodeItem("GeometryNodePointTranslate"), - NodeItem("GeometryNodeRotatePoints"), - NodeItem("GeometryNodeAlignRotationToVector"), + NodeItem("GeometryNodeLegacyPointDistribute", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyPointInstance", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyPointSeparate", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyPointScale", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyPointTranslate", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyRotatePoints", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeLegacyAlignRotationToVector", poll=geometry_nodes_fields_legacy_poll), ]), GeometryNodeCategory("GEO_UTILITIES", "Utilities", items=[ NodeItem("ShaderNodeMapRange"), @@ -596,7 +614,8 @@ geometry_node_categories = [ NodeItem("GeometryNodeViewer"), ]), GeometryNodeCategory("GEO_VOLUME", "Volume", items=[ - NodeItem("GeometryNodePointsToVolume"), + NodeItem("GeometryNodeLegacyPointsToVolume", poll=geometry_nodes_fields_legacy_poll), + NodeItem("GeometryNodeVolumeToMesh"), ]), GeometryNodeCategory("GEO_GROUP", "Group", items=node_group_items), |