diff options
Diffstat (limited to 'release')
75 files changed, 831 insertions, 478 deletions
diff --git a/release/darwin/bundle.sh b/release/darwin/bundle.sh index d1ef7a180e3..6d8695a441d 100755 --- a/release/darwin/bundle.sh +++ b/release/darwin/bundle.sh @@ -104,7 +104,7 @@ _image_size=$(echo "${_directory_size}" + 400 | bc) # extra 400 need for codesig echo echo -n "Creating disk image of size ${_image_size}M.." test -f "${_tmp_dmg}" && rm "${_tmp_dmg}" -hdiutil create -size "${_image_size}m" -fs HFS+ -srcfolder "${_tmp_dir}" -volname "${_volume_name}" -format UDRW "${_tmp_dmg}" +hdiutil create -size "${_image_size}m" -fs HFS+ -srcfolder "${_tmp_dir}" -volname "${_volume_name}" -format UDRW "${_tmp_dmg}" -mode 755 echo "Mounting readwrite image..." hdiutil attach -readwrite -noverify -noautoopen "${_tmp_dmg}" diff --git a/release/datafiles/bfont.ttf b/release/datafiles/bfont.ttf Binary files differindex 2217f9d1aad..7cb06a988ed 100644 --- a/release/datafiles/bfont.ttf +++ b/release/datafiles/bfont.ttf diff --git a/release/datafiles/blender_icons.svg b/release/datafiles/blender_icons.svg index 6a87ac0adaa..ebebc82695a 100644 --- a/release/datafiles/blender_icons.svg +++ b/release/datafiles/blender_icons.svg @@ -1048,6 +1048,9 @@ </linearGradient> + <filter color-interpolation-filters="sRGB" inkscape:collect="always" id="filter15613" x="-0.092011765" width="1.1840235" y="-0.097762503" height="1.1955251"> + <feGaussianBlur inkscape:collect="always" stdDeviation="0.65175" id="feGaussianBlur15615"/> + </filter> <linearGradient id="linearGradient37542-55"> <stop id="stop37544-61" offset="0" style="stop-color:#000000;stop-opacity:1;"/> <stop id="stop37546-03" offset="1" style="stop-color:#ffffff;stop-opacity:1;"/> @@ -1062,6 +1065,9 @@ </linearGradient> + <filter color-interpolation-filters="sRGB" inkscape:collect="always" id="filter15613-8" x="-0.092011765" width="1.1840235" y="-0.097762503" height="1.1955251"> + <feGaussianBlur inkscape:collect="always" stdDeviation="0.65175" id="feGaussianBlur15615-1"/> + </filter> <filter color-interpolation-filters="sRGB" inkscape:label="Greyscale" id="filter15388"> @@ -1321,6 +1327,14 @@ <radialGradient inkscape:collect="always" xlink:href="#linearGradient16595" id="radialGradient52883-6-8-3" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.39420438,-0.08239205,0.27256031,1.3040635,-362.22886,-161.73912)" cx="-302.79681" cy="462.0358" fx="-302.79681" fy="462.0358" r="8"/> + <filter style="color-interpolation-filters:sRGB" inkscape:collect="always" id="filter15613-7" x="-0.092011765" width="1.1840235" y="-0.097762503" height="1.1955251"> + <feGaussianBlur inkscape:collect="always" stdDeviation="0.65175" id="feGaussianBlur15615-4"/> + </filter> + + + <filter style="color-interpolation-filters:sRGB" inkscape:collect="always" id="filter15613-8-8" x="-0.092011765" width="1.1840235" y="-0.097762503" height="1.1955251"> + <feGaussianBlur inkscape:collect="always" stdDeviation="0.65175" id="feGaussianBlur15615-1-5"/> + </filter> <filter style="color-interpolation-filters:sRGB" inkscape:label="Greyscale" id="filter15388-0"> @@ -3732,6 +3746,14 @@ <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;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:new" d="m 449.50391,369 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 11 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 H 455 c 1.08333,0 2.07323,-0.26796 2.8125,-0.85938 C 458.55177,379.54921 459,378.625 459,377.5 c 0,-1.125 -0.44823,-2.04921 -1.1875,-2.64062 -0.49098,-0.39279 -1.11527,-0.59695 -1.78125,-0.72071 C 456.61178,373.63193 457,372.89881 457,372 c 0,-0.96354 -0.41934,-1.76349 -1.07422,-2.26758 C 455.27091,369.22833 454.41324,369 453.5,369 Z m 0.5,1 H 453.5 c 0.74361,0 1.38549,0.19369 1.81641,0.52539 0.43091,0.3317 0.68359,0.7813 0.68359,1.47461 0,0.69331 -0.25268,1.14291 -0.68359,1.47461 C 454.88549,373.80631 454.24361,374 453.5,374 h -3.49609 z m 0,5 h 3.46093 0.0352 1.5 c 0.91667,0 1.67677,0.23204 2.1875,0.64062 0.51073,0.40859 0.8125,0.98438 0.8125,1.85938 0,0.875 -0.30177,1.45079 -0.8125,1.85938 C 456.67677,379.76796 455.91667,380 455,380 h -4.99609 z" id="path10949-7" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccscsccscsccscscscccccscscscc"/> <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;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:new" d="m 408.50391,369 a 0.50005,0.50005 0 0 0 -0.5,0.5 v 5.91992 a 0.50005,0.50005 0 0 0 0,0.16211 V 380.5 a 0.50005,0.50005 0 1 0 1,0 V 376 h 3.25586 l 3.84961,4.8125 a 0.50024018,0.50024018 0 1 0 0.78124,-0.625 l -3.49414,-4.36914 c 1.48603,-0.40423 2.60743,-1.70768 2.60743,-3.31836 0,-1.92707 -1.57293,-3.5 -3.5,-3.5 z m 0.5,1 h 3.5 c 1.38662,0 2.5,1.11337 2.5,2.5 0,1.38663 -1.11338,2.5 -2.5,2.5 a 0.50005,0.50005 0 0 0 -0.004,0 h -3.49609 z" id="path13132" inkscape:connector-curvature="0"/> <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:0.99999994;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 431.51758,369.26562 C 429.42795,369.91461 428,371.85293 428,374.04102 V 376 c 0,1.78552 0.9537,3.43731 2.5,4.33008 1.54631,0.89277 3.45369,0.89277 5,0 1.5463,-0.89277 2.5,-2.54456 2.5,-4.33008 v -0.5 a 0.50004997,0.50004997 0 0 0 -0.5,-0.5 h -4 a 0.50004997,0.50004997 0 1 0 0,1 h 3.5 c 0,1.42986 -0.7617,2.74991 -2,3.46484 -1.23829,0.71494 -2.76171,0.71494 -4,0 -1.2383,-0.71493 -2,-2.03498 -2,-3.46484 v -1.95898 c 0,-1.75422 1.13918,-3.30002 2.81445,-3.82032 1.69498,-0.52641 3.36746,-0.003 4.25196,1.5293 a 0.50050004,0.50050004 0 1 0 0.86718,-0.5 c -1.1155,-1.93212 -3.34609,-2.62724 -5.41601,-1.98438 z" id="path13141" inkscape:connector-curvature="0"/> + <g style="display:inline;fill:#ffffff;enable-background:new" id="g13321" transform="translate(-42.000002,21.000005)"> + <g id="g13309" style="fill:#ffffff"> + <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: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: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;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 365.49219,94.992188 a 0.50005,0.50005 0 0 0 -0.38867,0.195312 0.50005,0.50005 0 0 0 -0.004,0.0059 l -1.95313,1.953125 a 0.50005,0.50005 0 1 0 0.70704,0.707032 L 365,96.707031 V 98.5 a 0.50005,0.50005 0 1 0 1,0 v -1.792969 l 1.14648,1.146485 a 0.50005,0.50005 0 1 0 0.70704,-0.707032 l -1.95704,-1.957031 a 0.50005,0.50005 0 0 0 -0.40429,-0.197265 z m 9.05859,1.941406 a 0.50005,0.50005 0 0 0 -0.0586,0.0059 h -2.93164 a 0.50005,0.50005 0 1 0 0,1 h 1.79297 l -3.14649,3.146486 a 0.50005,0.50005 0 1 0 0.70703,0.70703 l 3.14649,-3.146485 v 1.792965 a 0.50005,0.50005 0 1 0 1,0 v -2.931637 a 0.50005,0.50005 0 0 0 -0.50977,-0.574218 z m -0.0566,7.060546 a 0.50005,0.50005 0 0 0 -0.34766,0.85938 L 375.29297,106 H 371.5 a 0.50005,0.50005 0 1 0 0,1 h 3.79297 l -1.14649,1.14648 a 0.50005,0.50005 0 1 0 0.70704,0.70704 l 1.95703,-1.95704 a 0.50005,0.50005 0 0 0 0.002,-0.79296 0.50005,0.50005 0 0 0 -0.006,-0.004 l -1.95312,-1.95313 a 0.50005,0.50005 0 0 0 -0.35938,-0.15234 z" id="path13047-6" inkscape:connector-curvature="0"/> + </g> + <g id="g13313" style="fill:#ffffff"> + <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:0.98000004;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:accumulate" d="m 324.5,121 c -1.14583,0 -1.86235,0.56478 -2.18359,1.12695 C 321.99517,122.68912 322,123.25 322,123.25 V 125 h -0.5 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 4 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 6 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -4 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 H 327 v -1.75 c 0,0 0.005,-0.56088 -0.31641,-1.12305 C 326.36235,121.56478 325.64583,121 324.5,121 Z m 0,1 c 0.85417,0 1.13765,0.31022 1.31641,0.62305 C 325.99517,122.93588 326,123.25 326,123.25 V 125 h -3 v -1.75 c 0,0 0.005,-0.31412 0.18359,-0.62695 C 323.36235,122.31022 323.64583,122 324.5,122 Z m -0.5,4 h 1 v 2 h -1 z" transform="translate(42.000002,-21.000005)" id="rect13261" inkscape:connector-curvature="0"/> + </g> + </g> <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g13337" style="display:inline;opacity:0.98999999;fill:#ffffff;enable-background:new" transform="matrix(-1,0,0,1,1458,302.99979)"> <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.3;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;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 1262.5,-278.49979 h -13 v -13 h 13 v 13" id="path14450" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/> <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;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:new" d="m 1257.5039,-287 c -0.191,-10e-4 -0.3661,0.1063 -0.4512,0.27734 l -3,6 c -0.1652,0.33223 0.076,0.72231 0.4473,0.72266 h 6 c 0.371,-3.5e-4 0.6125,-0.39043 0.4473,-0.72266 l -3,-6 c -0.084,-0.16853 -0.2552,-0.27571 -0.4434,-0.27734 z" id="path13331" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc"/> @@ -3809,6 +3831,11 @@ <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:1px;stroke-linecap:butt;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 237.49219,305 a 0.50005,0.50005 0 0 0 -0.5,0.5 v 2 a 0.50005,0.50005 0 1 0 1,0 V 306 h 3 v 12 h -1.5 a 0.50005,0.50005 0 1 0 0,1 h 4 a 0.50005,0.50005 0 1 0 0,-1 h -1.5 v -12 h 3 v 1.5 a 0.50005,0.50005 0 1 0 1,0 v -2 a 0.50005,0.50005 0 0 0 -0.5,-0.5 z m 7,6 a 0.50005,0.50005 0 0 0 -0.5,0.5 v 1 a 0.50005,0.50005 0 1 0 1,0 V 312 h 2 v 6 h -0.5 a 0.50005,0.50005 0 1 0 0,1 h 2 a 0.50005,0.50005 0 1 0 0,-1 h -0.5 v -6 h 2 v 0.5 a 0.50005,0.50005 0 1 0 1,0 v -1 a 0.50005,0.50005 0 0 0 -0.5,-0.5 z" id="path6924-7" inkscape:connector-curvature="0"/> </g> <path inkscape:connector-curvature="0" d="m 353,628 h 1 v 1 h -1 z m -3,0 h 1 v 1 h -1 z m -3,0 h 1 v 1 h -1 z m -3,0 h 1 v 1 h -1 z m 9,-3 h 1 v 1 h -1 z m -3,0 h 1 v 1 h -1 z m -3,0 h 1 v 1 h -1 z m -3,0 h 1 v 1 h -1 z" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;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;enable-background:new" id="path14337"/> + <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: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:new" d="m 374.4375,121.17773 c -0.55229,-0.19531 -1.19407,-0.23097 -1.84766,0.002 -0.65359,0.23293 -1.30733,0.71399 -1.9707,1.49609 -0.28137,0.33173 -0.45085,0.79694 -0.61914,1.24219 -0.17701,-0.45587 -0.36207,-0.94012 -0.61914,-1.24219 -0.66249,-0.77846 -1.31558,-1.25837 -1.96875,-1.49023 -0.65317,-0.23186 -1.2953,-0.19616 -1.84766,-0.002 -1.10471,0.38842 -1.89002,1.32506 -2.44922,1.9961 a 0.50064603,0.50064603 0 1 0 0.76954,0.64062 c 0.54481,-0.65377 1.26345,-1.43095 2.00976,-1.69336 0.37316,-0.1312 0.7444,-0.1559 1.18359,0 0.4392,0.1559 0.95757,0.51168 1.54102,1.19727 0.19894,0.23376 0.56603,0.91963 0.64063,1.27734 A 0.50005,0.50005 0 0 0 369.75,125 h 0.5 a 0.50005,0.50005 0 0 0 0.49023,-0.40234 c 0.0736,-0.37229 0.37785,-0.96363 0.64063,-1.27344 0.58467,-0.68931 1.10595,-1.04668 1.54492,-1.20313 0.43897,-0.15644 0.80714,-0.13175 1.17969,0 0.74509,0.2635 1.46354,1.04375 2.00976,1.69922 a 0.50064603,0.50064603 0 1 0 0.76954,-0.64062 c -0.55904,-0.67084 -1.34269,-1.61133 -2.44727,-2.00196 z" id="path17826-1" inkscape:connector-curvature="0"/> + <g style="display:inline;fill:#ffffff;enable-background:new" id="g14433" transform="rotate(-90,380.52904,134)"> + <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;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:new" d="m 390.04688,140.46484 a 0.50005,0.50005 0 0 0 -0.41797,0.20704 l -2.95508,3.93945 a 0.50005,0.50005 0 0 0 -0.01,0.70703 l 2.96485,3.95312 a 0.50019216,0.50019216 0 1 0 0.80078,-0.5996 l -2.40039,-3.20118 h 7.1914 l -0.63867,1.27735 a 0.50005635,0.50005635 0 1 0 0.89453,0.44726 l 0.96875,-1.93554 a 0.50005,0.50005 0 0 0 -0.006,-0.58399 l -0.96289,-1.92773 a 0.50005635,0.50005635 0 1 0 -0.89453,0.44726 l 0.63867,1.27539 h -7.1914 l 2.40039,-3.19922 a 0.50005,0.50005 0 0 0 -0.38281,-0.80664 z" id="path17796-5" inkscape:connector-curvature="0"/> + </g> + <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;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 348.5,120 c -1.47879,0 -2.81353,0.43206 -3.80469,1.06641 C 343.70416,121.70075 343,122.54357 343,123.5 c 0,1.02778 0.79097,1.88608 1.87891,2.49805 1.08228,0.60878 2.52394,0.99597 4.09765,1 0.0129,9.4e-4 3.75669,0.27336 6.02344,-2.21094 V 127.5 a 0.50005,0.50005 0 1 0 1,0 v -4 a 0.50005,0.50005 0 0 0 -0.5,-0.5 h -4.25 a 0.50005,0.50005 0 1 0 0,1 h 3.10156 c -1.87731,2.16501 -5.32031,2 -5.32031,2 A 0.50005,0.50005 0 0 0 349,126 c -1.41667,0 -2.71684,-0.36001 -3.62891,-0.87305 C 344.45903,124.61392 344,123.97222 344,123.5 c 0,-0.41012 0.41561,-1.06779 1.23438,-1.5918 C 346.05313,121.38419 347.21846,121 348.5,121 a 0.50005,0.50005 0 1 0 0,-1 z" id="path18766-5" inkscape:connector-curvature="0"/> <g style="display:inline;fill:#ffffff;enable-background:new" id="g12950" transform="translate(-42.000002,4.4999696e-6)"> <g id="g12531-9" transform="translate(-209.00718,-44.00717)" style="display:inline;opacity:0.6;fill:#ffffff;enable-background:new"> <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: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:new" d="m 446.5,161 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 8 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 7 c 0.67616,0.01 0.67616,-1.00956 0,-1 H 447 v -7 h 0.5 4.9707 1.0293 c 0.67616,0.01 0.67616,-1.00956 0,-1 H 452.4707 447.5 Z m 4.50718,10.00717 L 451,173 h -1.5 c -0.67616,-0.01 -0.67616,1.00956 0,1 h 1.91992 c 0.0537,0.009 0.10843,0.009 0.16211,0 H 453.5 c 0.67616,0.01 0.67616,-1.00956 0,-1 H 452 l 0.007,-1.99283 z" id="path12529-5" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccccccccccccccc"/> @@ -4137,6 +4164,66 @@ <g transform="translate(41.999999,42.000005)" style="display:inline;opacity:1;fill:#ffffff;enable-background:new" id="g22961"> <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;stroke-linecap:butt;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 534.49219,599 C 534.2199,599 534,599.223 534,599.5 v 1.5 h -2.5 a 0.50005,0.50005 0 1 0 0,1 h 2.5 v 3 h -2.5 a 0.50005,0.50005 0 1 0 0,1 h 2.5 v 1.5 c 0,0.277 0.2199,0.5 0.49219,0.5 h 0.0156 C 534.7801,608 535,607.777 535,607.5 v -8 c 0,-0.277 -0.2199,-0.5 -0.49219,-0.5 z m 1.25781,1 v 7 H 537 c 1.69468,0 3,-1.30532 3,-3 v -1 c 0,-1.69468 -1.30532,-3 -3,-3 z" transform="translate(-41.999999,-42.000005)" id="path22706-5" inkscape:connector-curvature="0"/> <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: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:nonzero;stroke:none;stroke-width:1.00157475;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:new" d="m 499.48633,561.02734 c -0.55718,0.017 -0.67407,0.7946 -0.14649,0.97461 1.47614,0.5388 2.51343,1.91841 2.64454,3.53711 0.13105,1.61806 -0.67507,3.15416 -2.04493,3.94532 C 499.32404,569.8398 498.6905,570 498,570 h -9 v 1 h 9 c 0.84916,0 1.67422,-0.20648 2.43945,-0.64844 1.70819,-0.98656 2.70486,-2.89381 2.54297,-4.89258 -0.16183,-1.99811 -1.44941,-3.72267 -3.30078,-4.39843 -0.0622,-0.024 -0.12865,-0.0353 -0.19531,-0.0332 z" id="path22783-2-0" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccc"/> + <g style="display:inline;enable-background:new" id="g25540" transform="translate(582,-1322)"> + <g id="g25433" style="display:inline;enable-background:new"> + <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:0.7;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:miter;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:new" d="m -449.5,1609 c -0.67616,-0.01 -0.67616,1.0096 0,1 h 3.06836 c -0.18417,-0.3108 -0.32709,-0.6451 -0.42188,-1 z m 10.35352,0 c -0.0948,0.3549 -0.23771,0.6892 -0.42188,1 h 3.06055 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m -10.35352,3 c -0.67616,-0.01 -0.67616,1.0096 0,1 h 12.99219 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m 0,3 c -0.67616,-0.01 -0.67616,1.0096 0,1 h 12.99219 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m 0,3 c -0.67616,-0.01 -0.67616,1.0096 0,1 h 12.99219 c 0.67616,0.01 0.67616,-1.0096 0,-1 z" id="path25304" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccccccccccccccc"/> + <circle style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;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;enable-background:new" id="circle25308" cx="-443" cy="1608" r="1.5" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> + </g> + <g id="g25466" style="display:inline;enable-background:new"> + <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:0.7;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:miter;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:new" d="m -365.49219,1608 c -0.67616,-0.01 -0.67616,1.0096 0,1 H -352.5 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m 0,3 c -0.67616,-0.01 -0.67616,1.0096 0,1 h 2.63867 c 0.0948,-0.3549 0.23771,-0.6892 0.42188,-1 z m 9.92383,0 c 0.18417,0.3108 0.32709,0.6451 0.42188,1 H -352.5 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m -9.92383,3 c -0.67616,-0.01 -0.67616,1.0096 0,1 h 3.06055 c -0.18417,-0.3108 -0.32709,-0.6451 -0.42188,-1 z m 10.34571,0 c -0.0948,0.3549 -0.23771,0.6892 -0.42188,1 H -352.5 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m -10.34571,3 c -0.67616,-0.01 -0.67616,1.0096 0,1 H -352.5 c 0.67616,0.01 0.67616,-1.0096 0,-1 z" id="path25334" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccccccccccccccccccc"/> + <circle style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;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;enable-background:new" id="circle25338" cx="359" cy="-1613.0002" r="1.5" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" transform="scale(-1)"/> + </g> + <g id="g25449" style="display:inline;enable-background:new"> + <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:0.7;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:miter;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:new" d="m -406.5,1608 c -0.67616,-0.01 -0.67616,1.0096 0,1 h 11.99219 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m 3.93164,3 c 0.18417,0.3108 0.32709,0.6451 0.42188,1 h 7.63867 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m 0.42188,3 c -0.0948,0.3549 -0.23771,0.6892 -0.42188,1 h 8.06055 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m -4.35352,3 c -0.67616,-0.01 -0.67616,1.0096 0,1 h 11.99219 c 0.67616,0.01 0.67616,-1.0096 0,-1 z" id="path25345" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccccccccc"/> + <circle style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;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;enable-background:new" id="circle25349" cx="-406" cy="-1613.0002" r="1.5" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" transform="scale(1,-1)"/> + </g> + <g transform="matrix(1,0,0,-1,21,3226.0001)" id="g25439" style="display:inline;enable-background:new"> + <path sodipodi:nodetypes="ccccccccccccccccccccccccc" inkscape:connector-curvature="0" id="path25435" d="m -449.5,1609 c -0.67616,-0.01 -0.67616,1.0096 0,1 h 3.06836 c -0.18417,-0.3108 -0.32709,-0.6451 -0.42188,-1 z m 10.35352,0 c -0.0948,0.3549 -0.23771,0.6892 -0.42188,1 h 3.06055 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m -10.35352,3 c -0.67616,-0.01 -0.67616,1.0096 0,1 h 12.99219 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m 0,3 c -0.67616,-0.01 -0.67616,1.0096 0,1 h 12.99219 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m 0,3 c -0.67616,-0.01 -0.67616,1.0096 0,1 h 12.99219 c 0.67616,0.01 0.67616,-1.0096 0,-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.7;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:miter;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:new"/> + <circle inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" r="1.5" cy="1608" cx="-443" id="circle25437" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;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;enable-background:new"/> + </g> + <g transform="matrix(-1,0,0,1,-781.00069,0)" id="g25455" style="display:inline;enable-background:new"> + <path sodipodi:nodetypes="cccccccccccccccccccc" inkscape:connector-curvature="0" id="path25451" d="m -406.5,1608 c -0.67616,-0.01 -0.67616,1.0096 0,1 h 11.99219 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m 3.93164,3 c 0.18417,0.3108 0.32709,0.6451 0.42188,1 h 7.63867 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m 0.42188,3 c -0.0948,0.3549 -0.23771,0.6892 -0.42188,1 h 8.06055 c 0.67616,0.01 0.67616,-1.0096 0,-1 z m -4.35352,3 c -0.67616,-0.01 -0.67616,1.0096 0,1 h 11.99219 c 0.67616,0.01 0.67616,-1.0096 0,-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.7;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:miter;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:new"/> + <circle transform="scale(1,-1)" inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" r="1.5" cy="-1613.0002" cx="-406" id="circle25453" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;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;enable-background:new"/> + </g> + </g> + <g transform="translate(791,-1295)" style="display:inline;enable-background:new" id="g25378-9"> + <g transform="translate(1,-1)" id="g26210-2"> + <path inkscape:connector-curvature="0" id="path24970-9" d="m -511.49974,1278.4919 -2.6e-4,-2.1822 c 2e-5,-2.8698 1.14768,-5.4099 3,-6.8448 1.85234,-1.4349 4.14766,-1.4349 6,0 1.85233,1.4349 2.99998,4.0575 3,6.9272 v 2.0998" style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" sodipodi:nodetypes="ccsccc"/> + <g transform="translate(-729.00712,939.005)" style="opacity:1" id="g24984-6"> + <path sodipodi:nodetypes="cccccccccc" id="path24980-2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" d="m 228.50712,326.49495 h 2 v 2 h -2 z m -10.00994,0 h -2 v 2 h 2 z" inkscape:connector-curvature="0"/> + <path id="path24982-2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:normal" d="m 228.5043,327.5 -2.49718,-0.005 M 218.5,327.5 l 2.50712,-0.005" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc"/> + </g> + <rect style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;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" id="rect24986-0" width="1.9999762" height="2" x="-506.5" y="1265.5" rx="0" ry="0"/> + </g> + <g transform="translate(-21,-64)" id="g25924-0"> + <path sodipodi:nodetypes="ccsccc" style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" d="m -511.49974,1341.4919 -2.6e-4,-2.1822 c 2e-5,-2.8698 1.14768,-5.4099 3,-6.8448 1.85234,-1.4349 4.14766,-1.4349 6,0 1.85233,1.4349 2.99998,4.0575 3,6.9272 v 2.0998" id="path25802-2" inkscape:connector-curvature="0"/> + <rect ry="0" rx="0" y="1329.5" x="-504.5" height="2" width="1.9999762" id="rect25810-8" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;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"/> + </g> + <g transform="matrix(1,0,0,-1,-21,2604.9941)" id="g25919-9"> + <path sodipodi:nodetypes="ccccc" id="path25812-9" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999994;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;enable-background:new" d="m -464.5,1340.5001 v -2 h 2 v 2 z" inkscape:connector-curvature="0"/> + <path sodipodi:nodetypes="cccc" id="path25814-0" style="display:inline;overflow:visible;visibility:visible;opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" d="m -463.25,1339 5.75,-11.4994 m -6.25,11.4994 -5.75,-11.4994" inkscape:connector-curvature="0"/> + </g> + <g transform="matrix(-1,0,0,1,-968.99001,-84)" id="g25915-9"> + <path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" d="m -503.5,1348.5 h -2 v 2 h 2 z" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999994;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;enable-background:new" id="path25851-1"/> + <path sodipodi:nodetypes="csc" inkscape:connector-curvature="0" id="path25853-8" d="m -498.49506,1361.4978 -2.00459,-2.0055 c -2.16266,-2.1636 -3.0003,-5.1361 -3.0003,-7.9852 l 0.01,-1.0071" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:normal"/> + <path style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:normal" d="m -511.5049,1361.4907 c 0,-2.8491 0.8375,-5.8217 3.0003,-7.9852 L -505.5,1350.5" id="path25855-4" inkscape:connector-curvature="0" sodipodi:nodetypes="csc"/> + <g id="g25861-1" transform="translate(-47,-2)"> + <path sodipodi:nodetypes="ccccc" id="path25857-8" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" d="m -457.50994,1358.5 h -2 v 2 h 2 z" inkscape:connector-curvature="0"/> + <path id="path25859-9" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:normal" d="m -458.5,1358 v -3" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/> + </g> + <g transform="rotate(90,-479.5,1328.5)" id="g25873-3"> + <path inkscape:connector-curvature="0" d="m -457.50994,1359.5 h -2 v 2 h 2 z" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path25869-0" sodipodi:nodetypes="ccccc"/> + <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" d="m -458.5,1359 v -3" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:normal" id="path25871-3"/> + </g> + </g> + <g id="g25347-2"> + <g transform="translate(-43,-61)" id="g25301-4"> + <path sodipodi:nodetypes="ccsccc" style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" d="m -510.49974,1338.4932 -2.6e-4,-0.2387 c 0,-2.5685 1.14768,-5.2795 3,-6.6953 1.85233,-1.4159 4.14765,-1.4159 5.99999,0 1.85233,1.4158 3,4.1268 3,6.6953 v 0.2387" id="path25297-7" inkscape:connector-curvature="0"/> + <rect ry="0" rx="0" y="1328.5" x="-503.5" height="2" width="1.9999762" id="rect25299-7" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;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"/> + </g> + <path sodipodi:nodetypes="ccccccccccccccc" id="path25355-6-1" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;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;enable-background:new" d="m -554,1265 h 3 v -1 h -3 z m 5,0 h 3 v -1 h -3 z m 5,0 h 3 v -1 h -3 z" inkscape:connector-curvature="0"/> + </g> + </g> </g> <g style="display:inline;fill:#ffffff;enable-background:new" transform="rotate(-180,349.00525,417)" id="g22180" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <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: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:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;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:new" d="m 324.95117,410.94531 c -0.75176,0.0616 -1.47366,0.37015 -2.05469,0.95117 -1.16941,1.16942 -1.16162,2.91055 -0.28906,4.30664 0.87256,1.3961 2.57397,2.52709 4.83399,2.79297 2.83908,0.33401 5.63985,-1.05664 6.5332,-3.3125 a 0.50005,0.50005 0 1 0 -0.92969,-0.36718 c -0.67177,1.69632 -3.05327,2.97373 -5.48633,2.6875 -1.98998,-0.23411 -3.41357,-1.22813 -4.10351,-2.33203 -0.68994,-1.10391 -0.68215,-2.23778 0.14844,-3.06836 0.83795,-0.83796 1.98844,-0.89361 3.08398,-0.26368 1.09554,0.62994 2.08242,1.9799 2.31641,3.96875 a 0.50005,0.50005 0 1 0 0.99218,-0.11718 c -0.26601,-2.26115 -1.40413,-3.91119 -2.80859,-4.71875 -0.70223,-0.40379 -1.48457,-0.58895 -2.23633,-0.52735 z m 3.54102,9.04883 a 0.50005,0.50005 0 0 0 -0.37696,0.1875 c -0.31249,0.377 -0.92604,0.69672 -1.66015,0.78906 a 0.50005,0.50005 0 1 0 0.125,0.99219 c 0.94034,-0.11828 1.77818,-0.50935 2.30469,-1.14453 a 0.50005,0.50005 0 0 0 -0.39258,-0.82422 z" id="path22178" inkscape:connector-curvature="0"/> @@ -5348,6 +5435,23 @@ <path sodipodi:nodetypes="csssscccccc" inkscape:connector-curvature="0" id="path28911-6" transform="translate(540,1)" d="m 7,654 v 8 c 0,0.54532 0.45468,1 1,1 h 12 c 0.54532,0 1,-0.45468 1,-1 v -8 h -1 v 8 H 8 v -8 z" style="opacity:0.6;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;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"/> <path sodipodi:nodetypes="ssccccsssccccc" inkscape:connector-curvature="0" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;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" d="m 8,670 c -0.54532,0 -1,0.45468 -1,1 v 3 h 1 12 1 v -3 c 0,-0.54532 -0.45468,-1 -1,-1 z m 0,1 h 2 v 2 H 8 Z" transform="translate(540,-20)" id="path28913-4"/> </g> + <g id="g25642" transform="translate(-63,-20)" style="display:inline;fill:#ffffff;fill-opacity:1;enable-background:new"> + <path inkscape:connector-curvature="0" 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.7;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:1px;stroke-linecap:butt;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:accumulate" d="m -33.5,1328 c -0.27613,0 -0.49997,0.2239 -0.5,0.5 v 11 c 3e-5,0.2761 0.22387,0.5 0.5,0.5 h 2.5 v -3 c 0,-1.645 1.35499,-3 3,-3 h 2.585938 l -1.292969,-1.293 a 1.0001,1.0001 0 0 1 0.726562,-1.7168 1.0001,1.0001 0 0 1 0.6875,0.3028 l 3,3 a 1.0001,1.0001 0 0 1 0,1.414 l -3,3 a 1.0001,1.0001 0 1 1 -1.414062,-1.414 L -25.414062,1336 H -28 c -0.56413,0 -1,0.4359 -1,1 v 3 h 8.5 c 0.27613,0 0.49997,-0.2239 0.5,-0.5 v -9 c -3e-5,-0.2761 -0.22387,-0.5 -0.5,-0.5 H -29 v -1.5 c -3e-5,-0.2761 -0.22387,-0.5 -0.5,-0.5 z" transform="translate(397,-1232)" id="path25640"/> + </g> + <g transform="translate(712,-665)" style="display:inline;enable-background:new" id="g25686"> + <g transform="rotate(-180,-177.49644,1250.0035)" id="g25671"> + <path inkscape:connector-curvature="0" 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:1px;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:new" d="m -242.00195,1242.9922 c -0.58284,0 -1.10871,0.154 -1.47657,0.5215 -0.36785,0.3675 -0.52148,0.8952 -0.52148,1.4785 V 1248 h 6 v -2.4863 c -0.002,-0.3369 0.17839,-0.7279 0.47461,-1.0254 0.29622,-0.2975 0.68988,-0.4819 1.0293,-0.4844 0.65765,-0.012 0.6539,-0.9937 -0.004,-1 h -0.004 L -239,1243 v 0.4863 c 0.01,0.6762 -1.00956,0.6762 -1,0 v -0.4883 h -1 v 0.4903 c 0.01,0.6762 -1.00956,0.6762 -1,0 v -0.4922 h -0.002 z M -244,1249 v 0.5 c 0,0.2521 0.16407,0.4981 0.5,0.4863 l 1.50195,0.01 -0.002,5.9941 c -0.0191,1.3523 2.01913,1.3523 2,0 l -0.002,-5.9941 1.50195,-0.01 c 0.32137,0 0.5,-0.2464 0.5,-0.4863 v -0.5 z" transform="rotate(180,-208.99644,1250.0035)" id="path25652"/> + <g transform="matrix(1,0,0,-1,-61.992879,2500.0212)" id="g25669"> + <g id="g25662" transform="translate(-17)"> + <g transform="translate(-2,-2)" id="g25660"/> + </g> + </g> + </g> + <g id="g25684" transform="matrix(1,0,0,-1,0,2500.0142)"> + <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:1px;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:new" d="m -232,1242.9863 c -0.50478,0 -1.00956,0.3375 -1,1.0137 v 7 h 2 v -7 c 0.01,-0.6762 -0.49522,-1.0137 -1,-1.0137 z m 0,9.0274 c -1.09865,0 -2,0.9013 -2,2 0,0.8274 -0.13264,1.3367 -0.33203,1.5937 -0.1994,0.257 -0.49978,0.3926 -1.16797,0.3926 -0.11793,0 -0.23139,0.046 -0.32031,0.123 -0.0251,0.022 -0.048,0.046 -0.0684,0.072 -0.0409,0.053 -0.0708,0.1132 -0.0879,0.1777 -0.004,0.016 -0.007,0.033 -0.01,0.049 -0.003,0.017 -0.005,0.034 -0.006,0.051 -0.002,0.033 -7.6e-4,0.067 0.004,0.1 0.005,0.033 0.0138,0.065 0.0254,0.096 0.0107,0.031 0.0244,0.061 0.041,0.09 0.009,0.015 0.0188,0.029 0.0293,0.043 0.0403,0.053 0.0907,0.098 0.14844,0.1308 0.0742,0.043 0.15827,0.067 0.24414,0.068 2.01924,0 3.30957,-0.2641 4.16992,-0.7461 0.85624,-0.4797 1.23067,-1.2322 1.30078,-1.918 0.0175,-0.1066 0.0293,-0.2142 0.0293,-0.3222 0,-1.0987 -0.90135,-2 -2,-2 z" transform="matrix(1,0,0,-1,62.999999,2500.0142)" id="path25673" inkscape:connector-curvature="0" sodipodi:nodetypes="sccccssscscccccccccccccss"/> + <g transform="matrix(-1,0,0,1,-263.99995,0)" id="g25682"/> + </g> + </g> </g> <g inkscape:groupmode="layer" id="layer2" inkscape:label="EMPTY ICON TRACKING" style="display:none"> <g id="g16331" style="fill:#ffcc00"> diff --git a/release/datafiles/blender_icons16/icon16_anchor_bottom.dat b/release/datafiles/blender_icons16/icon16_anchor_bottom.dat Binary files differnew file mode 100644 index 00000000000..e79dfded6ef --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_anchor_bottom.dat diff --git a/release/datafiles/blender_icons16/icon16_anchor_center.dat b/release/datafiles/blender_icons16/icon16_anchor_center.dat Binary files differnew file mode 100644 index 00000000000..7dfbc8cce3a --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_anchor_center.dat diff --git a/release/datafiles/blender_icons16/icon16_anchor_left.dat b/release/datafiles/blender_icons16/icon16_anchor_left.dat Binary files differnew file mode 100644 index 00000000000..665291de855 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_anchor_left.dat diff --git a/release/datafiles/blender_icons16/icon16_anchor_right.dat b/release/datafiles/blender_icons16/icon16_anchor_right.dat Binary files differnew file mode 100644 index 00000000000..fcd2fe6c872 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_anchor_right.dat diff --git a/release/datafiles/blender_icons16/icon16_anchor_top.dat b/release/datafiles/blender_icons16/icon16_anchor_top.dat Binary files differnew file mode 100644 index 00000000000..fc90b1fed63 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_anchor_top.dat diff --git a/release/datafiles/blender_icons16/icon16_brushes_all.dat b/release/datafiles/blender_icons16/icon16_brushes_all.dat Binary files differnew file mode 100644 index 00000000000..82840288a39 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_brushes_all.dat diff --git a/release/datafiles/blender_icons16/icon16_folder_redirect.dat b/release/datafiles/blender_icons16/icon16_folder_redirect.dat Binary files differnew file mode 100644 index 00000000000..90b3498c0fd --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_folder_redirect.dat diff --git a/release/datafiles/blender_icons16/icon16_handle_aligned.dat b/release/datafiles/blender_icons16/icon16_handle_aligned.dat Binary files differnew file mode 100644 index 00000000000..5b265740449 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_handle_aligned.dat diff --git a/release/datafiles/blender_icons16/icon16_handle_auto.dat b/release/datafiles/blender_icons16/icon16_handle_auto.dat Binary files differnew file mode 100644 index 00000000000..93e21513010 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_handle_auto.dat diff --git a/release/datafiles/blender_icons16/icon16_handle_autoclamped.dat b/release/datafiles/blender_icons16/icon16_handle_autoclamped.dat Binary files differnew file mode 100644 index 00000000000..05e3b834710 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_handle_autoclamped.dat diff --git a/release/datafiles/blender_icons16/icon16_handle_free.dat b/release/datafiles/blender_icons16/icon16_handle_free.dat Binary files differnew file mode 100644 index 00000000000..d3cf9857b53 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_handle_free.dat diff --git a/release/datafiles/blender_icons16/icon16_handle_vector.dat b/release/datafiles/blender_icons16/icon16_handle_vector.dat Binary files differnew file mode 100644 index 00000000000..4d2e11ff72c --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_handle_vector.dat diff --git a/release/datafiles/blender_icons32/icon32_anchor_bottom.dat b/release/datafiles/blender_icons32/icon32_anchor_bottom.dat Binary files differnew file mode 100644 index 00000000000..0e56e3c653b --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_anchor_bottom.dat diff --git a/release/datafiles/blender_icons32/icon32_anchor_center.dat b/release/datafiles/blender_icons32/icon32_anchor_center.dat Binary files differnew file mode 100644 index 00000000000..0f859b7a316 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_anchor_center.dat diff --git a/release/datafiles/blender_icons32/icon32_anchor_left.dat b/release/datafiles/blender_icons32/icon32_anchor_left.dat Binary files differnew file mode 100644 index 00000000000..354154d1cf6 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_anchor_left.dat diff --git a/release/datafiles/blender_icons32/icon32_anchor_right.dat b/release/datafiles/blender_icons32/icon32_anchor_right.dat Binary files differnew file mode 100644 index 00000000000..7c7f7987596 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_anchor_right.dat diff --git a/release/datafiles/blender_icons32/icon32_anchor_top.dat b/release/datafiles/blender_icons32/icon32_anchor_top.dat Binary files differnew file mode 100644 index 00000000000..d4d67ce90c3 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_anchor_top.dat diff --git a/release/datafiles/blender_icons32/icon32_brushes_all.dat b/release/datafiles/blender_icons32/icon32_brushes_all.dat Binary files differnew file mode 100644 index 00000000000..d224036d082 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_brushes_all.dat diff --git a/release/datafiles/blender_icons32/icon32_folder_redirect.dat b/release/datafiles/blender_icons32/icon32_folder_redirect.dat Binary files differnew file mode 100644 index 00000000000..45ed10c6f46 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_folder_redirect.dat diff --git a/release/datafiles/blender_icons32/icon32_handle_aligned.dat b/release/datafiles/blender_icons32/icon32_handle_aligned.dat Binary files differnew file mode 100644 index 00000000000..7793d128216 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_handle_aligned.dat diff --git a/release/datafiles/blender_icons32/icon32_handle_auto.dat b/release/datafiles/blender_icons32/icon32_handle_auto.dat Binary files differnew file mode 100644 index 00000000000..e8675fb5884 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_handle_auto.dat diff --git a/release/datafiles/blender_icons32/icon32_handle_autoclamped.dat b/release/datafiles/blender_icons32/icon32_handle_autoclamped.dat Binary files differnew file mode 100644 index 00000000000..0bc5ba6275f --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_handle_autoclamped.dat diff --git a/release/datafiles/blender_icons32/icon32_handle_free.dat b/release/datafiles/blender_icons32/icon32_handle_free.dat Binary files differnew file mode 100644 index 00000000000..a2ee1527b1d --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_handle_free.dat diff --git a/release/datafiles/blender_icons32/icon32_handle_vector.dat b/release/datafiles/blender_icons32/icon32_handle_vector.dat Binary files differnew file mode 100644 index 00000000000..78788c56873 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_handle_vector.dat diff --git a/release/datafiles/bmonofont.ttf b/release/datafiles/bmonofont.ttf Binary files differindex e95786a49e4..06235dce116 100644 --- a/release/datafiles/bmonofont.ttf +++ b/release/datafiles/bmonofont.ttf diff --git a/release/datafiles/fonts/bmonofont-i18n.ttf.gz b/release/datafiles/fonts/bmonofont-i18n.ttf.gz Binary files differindex 1453ad48c6c..2c3e00d1c75 100644 --- a/release/datafiles/fonts/bmonofont-i18n.ttf.gz +++ b/release/datafiles/fonts/bmonofont-i18n.ttf.gz diff --git a/release/datafiles/fonts/droidsans.ttf.gz b/release/datafiles/fonts/droidsans.ttf.gz Binary files differindex 8cd640ba525..858264142f1 100644 --- a/release/datafiles/fonts/droidsans.ttf.gz +++ b/release/datafiles/fonts/droidsans.ttf.gz diff --git a/release/datafiles/icons/brush.sculpt.multiplane_scrape.dat b/release/datafiles/icons/brush.sculpt.multiplane_scrape.dat Binary files differnew file mode 100644 index 00000000000..98a5b3be902 --- /dev/null +++ b/release/datafiles/icons/brush.sculpt.multiplane_scrape.dat diff --git a/release/datafiles/icons/brush.sculpt.topology.dat b/release/datafiles/icons/brush.sculpt.topology.dat Binary files differnew file mode 100644 index 00000000000..0d455dce556 --- /dev/null +++ b/release/datafiles/icons/brush.sculpt.topology.dat diff --git a/release/datafiles/userdef/userdef_default.c b/release/datafiles/userdef/userdef_default.c index f6573873dd5..09ce29200b3 100644 --- a/release/datafiles/userdef/userdef_default.c +++ b/release/datafiles/userdef/userdef_default.c @@ -108,7 +108,6 @@ const UserDef U_default = { .keyconfigstr = "blender", .undosteps = 32, .undomemory = 0, - .gpu_viewport_quality = 0.6, .gp_manhattendist = 1, .gp_euclideandist = 2, .gp_eraser = 25, diff --git a/release/datafiles/userdef/userdef_default_theme.c b/release/datafiles/userdef/userdef_default_theme.c index 147b55f60ef..1eff85b6129 100644 --- a/release/datafiles/userdef/userdef_default_theme.c +++ b/release/datafiles/userdef/userdef_default_theme.c @@ -339,6 +339,7 @@ const bTheme U_theme_default = { .bone_solid = RGBA(0xb2b2b2ff), .bone_pose = RGBA(0x50c8ff50), .bone_pose_active = RGBA(0x8cffff50), + .bone_locked_weight = RGBA(0xff000080), .cframe = RGBA(0x60c040ff), .time_keyframe = RGBA(0xddd700ff), .time_gp_keyframe = RGBA(0xb5e61dff), @@ -419,7 +420,7 @@ const bTheme U_theme_default = { .list = RGBA(0x282828ff), .list_title = RGBA(0xffffffff), .list_text = RGBA(0xb8b8b8ff), - .list_text_hi = RGBA(0xffffffff), + .list_text_hi = RGBA(0xffaf29ff), .panelcolors = { .header = RGBA(0x424242cc), .back = RGBA(0x333333b3), @@ -453,11 +454,11 @@ const bTheme U_theme_default = { .anim_preview_range = RGBA(0xa14d0066), }, .space_info = { - .back = RGBA(0x42424200), - .title = RGBA(0xeeeeeeff), - .text = RGBA(0xe6e6e6ff), + .back = RGBA(0x28282800), + .title = RGBA(0xffffffff), + .text = RGBA(0xc3c3c3ff), .text_hi = RGBA(0xffffffff), - .header = RGBA(0x424242ff), + .header = RGBA(0x454545ff), .header_text = RGBA(0xeeeeeeff), .header_text_hi = RGBA(0xffffffff), .tab_active = RGBA(0x4b4b4bff), @@ -476,16 +477,20 @@ const bTheme U_theme_default = { .vertex_size = 3, .outline_width = 1, .facedot_size = 4, - .info_selected = RGBA(0x6080ffff), + .info_selected = RGBA(0x3b5689ff), .info_selected_text = RGBA(0xffffffff), - .info_error = RGBA(0x990000ff), + .info_error = RGBA(0xff613dff), .info_error_text = RGBA(0xffffffff), .info_warning = RGBA(0xb36a00ff), .info_warning_text = RGBA(0xffffffff), .info_info = RGBA(0x1d4383ff), .info_info_text = RGBA(0xffffffff), .info_debug = RGBA(0xd3d3d3ff), - }, + .info_property = RGBA(0x3ace87ff), + .info_property_text = RGBA(0xffffffff), + .info_operator = RGBA(0x3ace87ff), + .info_operator_text = RGBA(0xffffffff), + }, .space_action = { .back = RGBA(0x42424200), .title = RGBA(0xeeeeeeff), @@ -505,7 +510,7 @@ const bTheme U_theme_default = { .list = RGBA(0x282828ff), .list_title = RGBA(0xffffffff), .list_text = RGBA(0xb8b8b8ff), - .list_text_hi = RGBA(0xffffffff), + .list_text_hi = RGBA(0xffaf29ff), .panelcolors = { .header = RGBA(0x424242cc), .back = RGBA(0x333333b3), @@ -556,14 +561,14 @@ const bTheme U_theme_default = { .tab_inactive = RGBA(0x2b2b2bff), .tab_back = RGBA(0x232323ff), .tab_outline = RGBA(0x232323ff), - .button = RGBA(0x282828ff), + .button = RGBA(0x424242ff), .button_title = RGBA(0xffffffff), .button_text = RGBA(0xe5e5e5ff), .button_text_hi = RGBA(0xffffffff), .list = RGBA(0x282828ff), .list_title = RGBA(0xffffffff), .list_text = RGBA(0xb8b8b8ff), - .list_text_hi = RGBA(0xffffffff), + .list_text_hi = RGBA(0xffaf29ff), .panelcolors = { .header = RGBA(0x424242cc), .back = RGBA(0x333333b3), diff --git a/release/freedesktop/org.blender.Blender.appdata.xml b/release/freedesktop/org.blender.Blender.appdata.xml index 984b5b3b15e..bcf369a3601 100644 --- a/release/freedesktop/org.blender.Blender.appdata.xml +++ b/release/freedesktop/org.blender.Blender.appdata.xml @@ -40,6 +40,26 @@ </screenshot> </screenshots> <releases> + <release version="2.82" date="2020-02-13"> + <description> + <p>New features:</p> + <ul> + <li>New Mantaflow fluid and smoke simulation system</li> + <li>UDIM textures for rendering and painting</li> + <li>USD scene export</li> + <li>Bevel custom profiles</li> + <li>Cycles custom shader AOVs</li> + <li>Cloth air pressure simulation</li> + <li>Weld modifier for meshes</li> + </ul> + <p>Enhancements:</p> + <ul> + <li>New and improved sculpt tools</li> + <li>New grease pencil tools and modifiers</li> + <li>New bone and constraint settings for rigging</li> + </ul> + </description> + </release> <release version="2.81" date="2019-11-14"> <description> <p>New features:</p> @@ -50,7 +70,6 @@ <li>Revamped shaders for texturing</li> <li>Cycles denoising with OpenImageDenoise and NVIDIA RTX support</li> <li>Library overrides to make local overrides to linked characters and other data</li> - <li> </ul> <ul> <p>Enhancements:</p> diff --git a/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py b/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py index 4aaa30a0508..2034b2ac55c 100644 --- a/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py +++ b/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py @@ -599,8 +599,8 @@ def dump_py_messages_from_files(msgs, reports, files, settings): # We manually add funcs from bpy.app.translations for func_id, func_ids in pgettext_variants: func_translate_args[func_id] = pgettext_variants_args - for func_id in func_ids: - func_translate_args[func_id] = pgettext_variants_args + for sub_func_id in func_ids: + func_translate_args[sub_func_id] = pgettext_variants_args # print(func_translate_args) # Break recursive nodes look up on some kind of nodes. diff --git a/release/scripts/modules/bl_i18n_utils/utils.py b/release/scripts/modules/bl_i18n_utils/utils.py index 2cca4171193..7c22a86d687 100644 --- a/release/scripts/modules/bl_i18n_utils/utils.py +++ b/release/scripts/modules/bl_i18n_utils/utils.py @@ -1413,8 +1413,8 @@ class I18n: "# and edit the translations by hand.", "# Just carefully respect the format of the tuple!", "", - "# Tuple of tuples " - "((msgctxt, msgid), (sources, gen_comments), (lang, translation, (is_fuzzy, comments)), ...)", + "# Tuple of tuples:", + "# ((msgctxt, msgid), (sources, gen_comments), (lang, translation, (is_fuzzy, comments)), ...)", "translations_tuple = (", ] # First gather all keys (msgctxt, msgid) - theoretically, all translations should share the same, but... diff --git a/release/scripts/modules/bpy/utils/__init__.py b/release/scripts/modules/bpy/utils/__init__.py index abe33b0e8ea..3d36f3eb510 100644 --- a/release/scripts/modules/bpy/utils/__init__.py +++ b/release/scripts/modules/bpy/utils/__init__.py @@ -409,26 +409,17 @@ def app_template_paths(subdir=None): :return: app template paths. :rtype: generator """ - # Note: keep in sync with: Blender's BKE_appdir_app_template_any - - subdir_tuple = (subdir,) if subdir is not None else () - - # Avoid adding 'bl_app_templates_system' twice. - # Either we have a portable build or an installed system build. - for resource_type, module_name in ( - ('USER', "bl_app_templates_user"), - ('LOCAL', "bl_app_templates_system"), - ('SYSTEM', "bl_app_templates_system"), + subdir_args = (subdir,) if subdir is not None else () + # Note: keep in sync with: Blender's 'BKE_appdir_app_template_any'. + # Uses 'BLENDER_USER_SCRIPTS', 'BLENDER_SYSTEM_SCRIPTS' + # ... in this case 'system' accounts for 'local' too. + for resource_fn, module_name in ( + (_user_resource, "bl_app_templates_user"), + (system_resource, "bl_app_templates_system"), ): - path = resource_path(resource_type) - if path: - path = _os.path.join( - *(path, "scripts", "startup", module_name, *subdir_tuple)) - if _os.path.isdir(path): - yield path - # Only load LOCAL or SYSTEM (never both). - if resource_type == 'LOCAL': - break + path = resource_fn('SCRIPTS', _os.path.join("startup", module_name, *subdir_args)) + if path and _os.path.isdir(path): + yield path def preset_paths(subdir): @@ -486,7 +477,10 @@ def is_path_builtin(path): ): return True except FileNotFoundError: - #The path we tried to look up doesn't exist + # The path we tried to look up doesn't exist. + pass + except ValueError: + # Happens on Windows when paths don't have the same drive. pass return False diff --git a/release/scripts/modules/bpy_extras/anim_utils.py b/release/scripts/modules/bpy_extras/anim_utils.py index e402c9cb53c..c67134ac3f6 100644 --- a/release/scripts/modules/bpy_extras/anim_utils.py +++ b/release/scripts/modules/bpy_extras/anim_utils.py @@ -249,11 +249,17 @@ def bake_action_iter( if action is None: action = bpy.data.actions.new("Action") - # Leave tweak mode before trying to modify the action (T48397) - if atd.use_tweak_mode: - atd.use_tweak_mode = False + # Only leave tweak mode if we actually need to modify the action (T57159) + if action != atd.action: + # Leave tweak mode before trying to modify the action (T48397) + if atd.use_tweak_mode: + atd.use_tweak_mode = False - atd.action = action + atd.action = action + + # Baking the action only makes sense in Replace mode, so force it (T69105) + if not atd.use_tweak_mode: + atd.action_blend_type = 'REPLACE' # ------------------------------------------------------------------------- # Apply transformations to action diff --git a/release/scripts/modules/rna_manual_reference.py b/release/scripts/modules/rna_manual_reference.py index 1f01523534f..2e78f18b78e 100644 --- a/release/scripts/modules/rna_manual_reference.py +++ b/release/scripts/modules/rna_manual_reference.py @@ -197,7 +197,6 @@ url_manual_mapping = ( ("bpy.types.compositornodedilateerode*", "compositing/types/filter/dilate_erode.html#bpy-types-compositornodedilateerode"), ("bpy.types.compositornodeellipsemask*", "compositing/types/matte/ellipse_mask.html#bpy-types-compositornodeellipsemask"), ("bpy.types.compositornodesplitviewer*", "compositing/types/output/split_viewer.html#bpy-types-compositornodesplitviewer"), - ("bpy.types.curve.use_uv_as_generated*", "editors/uv/generated_uvs.html#bpy-types-curve-use-uv-as-generated"), ("bpy.types.dynamicpaintbrushsettings*", "physics/dynamic_paint/brush.html#bpy-types-dynamicpaintbrushsettings"), ("bpy.types.materialgpencilstyle.flip*", "grease_pencil/materials/grease_pencil_shader.html#bpy-types-materialgpencilstyle-flip"), ("bpy.types.materialgpencilstyle.mode*", "grease_pencil/materials/grease_pencil_shader.html#bpy-types-materialgpencilstyle-mode"), diff --git a/release/scripts/modules/rna_prop_ui.py b/release/scripts/modules/rna_prop_ui.py index 202fd865723..8dda8c90f85 100644 --- a/release/scripts/modules/rna_prop_ui.py +++ b/release/scripts/modules/rna_prop_ui.py @@ -277,14 +277,15 @@ def draw(layout, context, context_member, property_type, use_edit=True): else: val_draw = val - row = flow.row(align=True) + row = layout.row(align=True) box = row.box() if use_edit: split = box.split(factor=0.75) row = split.row(align=True) else: - row = box.row(align=True) + split = box.split(factor=1.00) + row = split.row(align=True) row.alignment = 'RIGHT' diff --git a/release/scripts/modules/rna_xml.py b/release/scripts/modules/rna_xml.py index 95196cb83fa..d9fc09e7d18 100644 --- a/release/scripts/modules/rna_xml.py +++ b/release/scripts/modules/rna_xml.py @@ -100,7 +100,7 @@ def rna2xml( elif val_type == bool: return "TRUE" if val else "FALSE" else: - raise NotImplemented("this type is not a number %s" % val_type) + raise NotImplementedError("this type is not a number %s" % val_type) def rna2xml_node(ident, value, parent): ident_next = ident + ident_val diff --git a/release/scripts/modules/sys_info.py b/release/scripts/modules/sys_info.py index 8b4e224efe4..656e2b3bd54 100644 --- a/release/scripts/modules/sys_info.py +++ b/release/scripts/modules/sys_info.py @@ -172,6 +172,13 @@ def write_sysinfo(filepath): else: output.write("Blender was built without Alembic support\n") + usd = bpy.app.usd + output.write("USD: ") + if usd.supported: + output.write("%s\n" % usd.version_string) + else: + output.write("Blender was built without USD support\n") + if not bpy.app.build_options.sdl: output.write("SDL: Blender was built without SDL support\n") diff --git a/release/scripts/presets/keyconfig/blender.py b/release/scripts/presets/keyconfig/blender.py index 596b17d734f..11cd76335f1 100644 --- a/release/scripts/presets/keyconfig/blender.py +++ b/release/scripts/presets/keyconfig/blender.py @@ -70,6 +70,7 @@ class Prefs(bpy.types.KeyConfigPreferences): ('DRAG', "Drag", "Drag allows click events to pass through to the tool, adding a small delay"), ), description="Activation event for gizmos that support drag motion", + default='DRAG', update=update_fn, ) diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 173e7e5f332..629bc24abb3 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -290,12 +290,14 @@ def _template_items_proportional_editing(*, connected=False): # Tool System Templates -def _template_items_tool_select(params, operator, cursor_operator): +def _template_items_tool_select(params, operator, cursor_operator, *, extend): if params.select_mouse == 'LEFTMOUSE': # Immediate select without quick delay. return [ (operator, {"type": 'LEFTMOUSE', "value": 'PRESS'}, {"properties": [("deselect_all", True)]}), + (operator, {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, + {"properties": [(extend, True)]}), ] else: # For right mouse, set the cursor. @@ -940,6 +942,7 @@ def km_view3d(params): # Visibility. ("view3d.localview", {"type": 'NUMPAD_SLASH', "value": 'PRESS'}, None), ("view3d.localview", {"type": 'SLASH', "value": 'PRESS'}, None), + ("view3d.localview", {"type": 'MOUSESMARTZOOM', "value": 'ANY'}, None), ("view3d.localview_remove_from", {"type": 'M', "value": 'PRESS'}, None), # Navigation. ("view3d.rotate", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None), @@ -1526,7 +1529,7 @@ def km_image_generic(_params): ("image.reload", {"type": 'R', "value": 'PRESS', "alt": True}, None), ("image.read_viewlayers", {"type": 'R', "value": 'PRESS', "ctrl": True}, None), ("image.save", {"type": 'S', "value": 'PRESS', "alt": True}, None), - ("image.save_as", {"type": 'S', "value": 'PRESS', "shift": True}, None), + ("image.save_as", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True}, None), ("image.cycle_render_slot", {"type": 'J', "value": 'PRESS'}, None), ("image.cycle_render_slot", {"type": 'J', "value": 'PRESS', "alt": True}, {"properties": [("reverse", True)]}), @@ -2032,6 +2035,7 @@ def km_dopesheet(params): op_menu_pie("VIEW3D_MT_proportional_editing_falloff_pie", {"type": 'O', "value": 'PRESS', "shift": True}), ("marker.add", {"type": 'M', "value": 'PRESS'}, None), ("marker.rename", {"type": 'M', "value": 'PRESS', "ctrl": True}, None), + ("marker.camera_bind", {"type": 'B', "value": 'PRESS', "ctrl": True}, None), *_template_items_context_menu("DOPESHEET_MT_context_menu", params.context_menu_event), ]) @@ -2333,6 +2337,7 @@ def km_sequencercommon(_params): items.extend([ *_template_space_region_type_toggle( + toolbar_key={"type": 'T', "value": 'PRESS'}, sidebar_key={"type": 'N', "value": 'PRESS'}, ), ("wm.context_toggle", {"type": 'O', "value": 'PRESS', "shift": True}, @@ -2340,6 +2345,13 @@ def km_sequencercommon(_params): ("sequencer.view_toggle", {"type": 'TAB', "value": 'PRESS', "ctrl": True}, None), ]) + if _params.select_mouse == 'LEFTMOUSE' and not _params.legacy: + # Quick switch to select tool, since left select can't easily + # select with any tool active. + items.extend([ + op_tool_cycle("builtin.select_box", {"type": 'W', "value": 'PRESS'}), + ]) + return keymap @@ -2918,6 +2930,10 @@ def km_animation_channels(params): *_template_items_select_actions(params, "anim.channels_select_all"), ("anim.channels_select_box", {"type": 'B', "value": 'PRESS'}, None), ("anim.channels_select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None), + ("anim.channels_select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "shift": True,}, + {"properties": [("extend", True)]}), + ("anim.channels_select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "ctrl": True,}, + {"properties": [("deselect", True)]}), # Delete. ("anim.channels_delete", {"type": 'X', "value": 'PRESS'}, None), ("anim.channels_delete", {"type": 'DEL', "value": 'PRESS'}, None), @@ -3589,7 +3605,7 @@ def km_curve(params): ) items.extend([ - op_menu("VIEW3D_MT_curve_add", {"type": 'A', "value": 'PRESS', "shift": True}), + op_menu("TOPBAR_MT_edit_curve_add", {"type": 'A', "value": 'PRESS', "shift": True}), ("curve.handle_type_set", {"type": 'V', "value": 'PRESS'}, None), ("curve.vertex_add", {"type": params.action_mouse, "value": 'CLICK', "ctrl": True}, None), *_template_items_select_actions(params, "curve.select_all"), @@ -5055,7 +5071,7 @@ def km_image_editor_tool_uv_select(params): return ( "Image Editor Tool: Uv, Tweak", {"space_type": 'IMAGE_EDITOR', "region_type": 'WINDOW'}, - {"items": _template_items_tool_select(params, "uv.select", "uv.cursor_set")}, + {"items": _template_items_tool_select(params, "uv.select", "uv.cursor_set", extend="extend")}, ) @@ -5206,7 +5222,7 @@ def km_3d_view_tool_select(params): return ( "3D View Tool: Tweak", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, - {"items": _template_items_tool_select(params, "view3d.select", "view3d.cursor3d")}, + {"items": _template_items_tool_select(params, "view3d.select", "view3d.cursor3d", extend="toggle")}, ) @@ -5280,6 +5296,26 @@ def km_3d_view_tool_scale(params): ) +def km_3d_view_tool_shear(params): + return ( + "3D View Tool: Shear", + {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, + {"items": [ + ("transform.shear", + {"type": params.tool_tweak, "value": 'NORTH'}, + {"properties": [("release_confirm", True), ("orient_axis_ortho", 'Y')]}), + ("transform.shear", + {"type": params.tool_tweak, "value": 'SOUTH'}, + {"properties": [("release_confirm", True), ("orient_axis_ortho", 'Y')]}), + + # Use as fallback to catch diagonals too. + ("transform.shear", + {"type": params.tool_tweak, "value": 'ANY'}, + {"properties": [("release_confirm", True), ("orient_axis_ortho", 'X')]}), + ]}, + ) + + def km_3d_view_tool_measure(params): return ( "3D View Tool: Measure", @@ -5535,7 +5571,7 @@ def km_3d_view_tool_edit_mesh_smooth(params): {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ ("mesh.vertices_smooth", {"type": params.tool_tweak, "value": 'ANY'}, - {"properties": [("factor", 0.0), ("wait_for_input", False)]}), + {"properties": [("wait_for_input", False)]}), ]}, ) @@ -5546,7 +5582,7 @@ def km_3d_view_tool_edit_mesh_randomize(params): {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ ("transform.vertex_random", {"type": params.tool_tweak, "value": 'ANY'}, - {"properties": [("offset", 0.0), ("wait_for_input", False)]}), + {"properties": [("wait_for_input", False)]}), ]}, ) @@ -5595,26 +5631,6 @@ def km_3d_view_tool_edit_mesh_push_pull(params): ) -def km_3d_view_tool_edit_mesh_shear(params): - return ( - "3D View Tool: Edit Mesh, Shear", - {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, - {"items": [ - ("transform.shear", - {"type": params.tool_tweak, "value": 'NORTH'}, - {"properties": [("release_confirm", True), ("orient_axis_ortho", 'Y')]}), - ("transform.shear", - {"type": params.tool_tweak, "value": 'SOUTH'}, - {"properties": [("release_confirm", True), ("orient_axis_ortho", 'Y')]}), - - # Use as fallback to catch diagonals too. - ("transform.shear", - {"type": params.tool_tweak, "value": 'ANY'}, - {"properties": [("release_confirm", True), ("orient_axis_ortho", 'X')]}), - ]}, - ) - - def km_3d_view_tool_edit_mesh_to_sphere(params): return ( "3D View Tool: Edit Mesh, To Sphere", @@ -5686,7 +5702,7 @@ def km_3d_view_tool_edit_curve_randomize(params): {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ ("transform.vertex_random", {"type": params.tool_tweak, "value": 'ANY'}, - {"properties": [("offset", 0.0), ("wait_for_input", False)]}), + {"properties": [("wait_for_input", False)]}), ]}, ) @@ -5913,7 +5929,7 @@ def km_3d_view_tool_edit_gpencil_select(params): return ( "3D View Tool: Edit Gpencil, Tweak", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, - {"items": _template_items_tool_select(params, "gpencil.select", "view3d.cursor3d")}, + {"items": _template_items_tool_select(params, "gpencil.select", "view3d.cursor3d", extend="toggle")}, ) @@ -5960,7 +5976,7 @@ def km_3d_view_tool_edit_gpencil_radius(params): {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ ("transform.transform", {"type": params.tool_tweak, "value": 'ANY'}, - {"properties": [("mode", 'CURVE_SHRINKFATTEN'), ("release_confirm", True)]}), + {"properties": [("mode", 'GPENCIL_SHRINKFATTEN'), ("release_confirm", True)]}), ]}, ) @@ -6018,7 +6034,7 @@ def km_3d_view_tool_sculpt_gpencil_select(params): return ( "3D View Tool: Sculpt Gpencil, Tweak", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, - {"items": _template_items_tool_select(params, "gpencil.select", "view3d.cursor3d")}, + {"items": _template_items_tool_select(params, "gpencil.select", "view3d.cursor3d", extend="toggle")}, ) @@ -6049,6 +6065,39 @@ def km_3d_view_tool_sculpt_gpencil_select_lasso(params): ) +def km_sequencer_editor_tool_select(params): + return ( + "Sequencer Tool: Select", + {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, + {"items": [ + ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS'}, + {"properties": [("extend", False), ("deselect_all", not params.legacy)]}), + ]}, + ) + + +def km_sequencer_editor_tool_select_box(params): + return ( + "Sequencer Tool: Select Box", + {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, + {"items": _template_items_tool_select_actions_simple( + "sequencer.select_box", type=params.tool_tweak, value='ANY', + properties=[("tweak", True)], + )}, + ) + + +def km_sequencer_editor_tool_cut(params): + return ( + "Sequencer Tool: Cut", + {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, + {"items":[ + ("sequencer.cut", {"type": 'LEFTMOUSE', "value": 'PRESS'}, + {"properties": [("type", 'SOFT'), ("side", 'NO_CHANGE'), ("use_cursor_position", True), ("ignore_selection", True)]}), + ]}, + ) + + # ------------------------------------------------------------------------------ # Full Configuration @@ -6194,6 +6243,7 @@ def generate_keymaps(params=None): km_3d_view_tool_move(params), km_3d_view_tool_rotate(params), km_3d_view_tool_scale(params), + km_3d_view_tool_shear(params), km_3d_view_tool_measure(params), km_3d_view_tool_pose_breakdowner(params), km_3d_view_tool_pose_push(params), @@ -6223,7 +6273,6 @@ def generate_keymaps(params=None): km_3d_view_tool_edit_mesh_vertex_slide(params), km_3d_view_tool_edit_mesh_shrink_fatten(params), km_3d_view_tool_edit_mesh_push_pull(params), - km_3d_view_tool_edit_mesh_shear(params), km_3d_view_tool_edit_mesh_to_sphere(params), km_3d_view_tool_edit_mesh_rip_region(params), km_3d_view_tool_edit_mesh_rip_edge(params), @@ -6262,6 +6311,9 @@ def generate_keymaps(params=None): km_3d_view_tool_sculpt_gpencil_select_box(params), km_3d_view_tool_sculpt_gpencil_select_circle(params), km_3d_view_tool_sculpt_gpencil_select_lasso(params), + km_sequencer_editor_tool_select(params), + km_sequencer_editor_tool_select_box(params), + km_sequencer_editor_tool_cut(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 e6d68510312..0bffd316f30 100644 --- a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py +++ b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py @@ -39,6 +39,9 @@ class Params: use_mouse_emulate_3_button=False, ): self.tool_mouse = 'LEFTMOUSE' + self.select_mouse = 'LEFTMOUSE' + self.select_mouse_value = 'CLICK' + self.select_tweak = 'EVT_TWEAK_L' self.tool_tweak = 'EVT_TWEAK_L' self.action_tweak = 'EVT_TWEAK_R' self.use_mouse_emulate_3_button = use_mouse_emulate_3_button @@ -114,20 +117,6 @@ def _template_items_animation(): ] -# Gizmos - -def _template_items_gizmo_tweak_value(): - return [ - ("gizmogroup.gizmo_tweak", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), - ] - - -def _template_items_gizmo_tweak_value_click_drag(): - return [ - ("gizmogroup.gizmo_tweak", {"type": 'LEFTMOUSE', "value": 'CLICK'}, None), - ("gizmogroup.gizmo_tweak", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None), - ] - def _template_items_gizmo_tweak_value_drag(): return [ @@ -149,8 +138,13 @@ def _template_items_basic_tools(*, connected=False): op_tool_cycle("builtin.cursor", {"type": 'C', "value": 'PRESS'}), ] -def _template_items_tool_select(params, operator, cursor_operator): - return [(operator, {"type": 'LEFTMOUSE', "value": 'PRESS'}, None)] +def _template_items_tool_select(params, operator, *, extend): + return [ + (operator, {"type": 'LEFTMOUSE', "value": 'PRESS'}, + {"properties": [("deselect_all", True)]}), + (operator, {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, + {"properties": [(extend, True)]}), + ] def _template_items_tool_select_actions(operator, *, type, value): @@ -180,6 +174,19 @@ def _template_items_tool_select_actions_simple(operator, *, type, value, propert ] +def _template_items_editmode_mesh_select_mode(params): + return [ + ( + "mesh.select_mode", + {"type": k, "value": 'PRESS', **key_expand, **key_extend}, + {"properties": [*prop_extend, *prop_expand, ("type", e)]} + ) + for key_expand, prop_expand in (({}, ()), ({"ctrl": True}, (("use_expand", True),))) + for key_extend, prop_extend in (({}, ()), ({"shift": True}, (("use_extend", True),))) + for k, e in (('ONE', 'VERT'), ('TWO', 'EDGE'), ('THREE', 'FACE')) + ] + + # ------------------------------------------------------------------------------ # Window, Screen, Areas, Regions @@ -541,6 +548,7 @@ def km_uv_editor(params): op_panel("TOPBAR_PT_name", {"type": 'RET', "value": 'PRESS'}, [("keep_open", False)]), ("wm.search_menu", {"type": 'TAB', "value": 'PRESS'}, None), # Selection modes. + *_template_items_editmode_mesh_select_mode(params), ("wm.context_set_enum", {"type": 'ONE', "value": 'PRESS'}, {"properties": [("data_path", 'tool_settings.uv_select_mode'), ("value", 'VERTEX')]}), ("wm.context_set_enum", {"type": 'TWO', "value": 'PRESS'}, @@ -554,6 +562,7 @@ def km_uv_editor(params): {"properties": [("extend", False), ("deselect_all", True)]}), ("uv.select", {"type": 'LEFTMOUSE', "value": 'CLICK', "shift": True}, {"properties": [("extend", True), ("deselect_all", False)]}), + ("transform.translate", {"type": "EVT_TWEAK_L", "value": 'ANY'}, None), ("uv.select_loop", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK', "shift": True}, {"properties": [("extend", True)]}), @@ -621,6 +630,7 @@ def km_view3d(params): ("wm.search_menu", {"type": 'TAB', "value": 'PRESS'}, None), # Visibility. ("view3d.localview", {"type": 'I', "value": 'PRESS', "shift": True}, None), + ("view3d.localview", {"type": 'MOUSESMARTZOOM', "value": 'ANY'}, None), op_menu_pie("VIEW3D_MT_view_pie", {"type": 'V', "value": 'PRESS'}), # Navigation. ("view3d.rotate", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True}, None), @@ -755,7 +765,6 @@ def km_mask_editing(params): ("mask.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'SELECT')]}), ("mask.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}), ("mask.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}), - #*_template_items_select_actions(params, "mask.select_all"), ("mask.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None), ("mask.select_linked_pick", {"type": 'L', "value": 'PRESS'}, {"properties": [("deselect", False)]}), @@ -946,7 +955,7 @@ def km_image_generic(params): ("image.reload", {"type": 'R', "value": 'PRESS', "alt": True}, None), ("image.read_viewlayers", {"type": 'R', "value": 'PRESS', "ctrl": True}, None), ("image.save", {"type": 'S', "value": 'PRESS', "alt": True}, None), - ("image.save_as", {"type": 'S', "value": 'PRESS', "shift": True}, None), + ("image.save_as", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True}, None), ]) return keymap @@ -1004,14 +1013,6 @@ def km_image(params): {"properties": [("point", 'BLACK_POINT')]}), ("image.curves_point_set", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, {"properties": [("point", 'WHITE_POINT')]}), - ("object.mode_set", {"type": 'ONE', "value": 'PRESS'}, - {"properties": [("mode", 'EDIT')]}), - ("object.mode_set", {"type": 'TWO', "value": 'PRESS'}, - {"properties": [("mode", 'OBJECT')]}), - ("object.mode_set", {"type": 'THREE', "value": 'PRESS'}, - {"properties": [("mode", 'OBJECT')]}), - ("object.mode_set", {"type": 'FOUR', "value": 'PRESS'}, - {"properties": [("mode", 'OBJECT')]}), op_menu_pie("IMAGE_MT_pivot_pie", {"type": 'PERIOD', "value": 'PRESS'}), # Tools op_tool_cycle("builtin.select_box", {"type": 'Q', "value": 'PRESS'}), @@ -2190,8 +2191,11 @@ def km_animation_channels(params): ("anim.channels_select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'SELECT')]}), ("anim.channels_select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}), ("anim.channels_select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}), - ("anim.channels_select_box", {"type": 'B', "value": 'PRESS'}, None), ("anim.channels_select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None), + ("anim.channels_select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "shift": True,}, + {"properties": [("extend", True)]}), + ("anim.channels_select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "ctrl": True,}, + {"properties": [("deselect", True)]}), # Delete. ("anim.channels_delete", {"type": 'BACK_SPACE', "value": 'PRESS'}, None), ("anim.channels_delete", {"type": 'DEL', "value": 'PRESS'}, None), @@ -2249,10 +2253,12 @@ def km_grease_pencil(_params): def _grease_pencil_selection(params): return [ - # Select all - ("gpencil.select_box", {"type": 'A', "value": 'PRESS', "ctrl": True}, None), ("gpencil.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, {"properties": [("extend", True), ("toggle", True)]}), + # Select all + ("gpencil.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'SELECT')]}), + ("gpencil.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}), + ("gpencil.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}), # Select linked ("gpencil.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None), # Select alternate @@ -2265,14 +2271,6 @@ def _grease_pencil_selection(params): ] -def _grease_pencil_display(): - return [ - ("wm.context_toggle", {"type": 'Q', "value": 'PRESS', "shift": True}, - {"properties": [("data_path", 'space_data.overlay.use_gpencil_edit_lines')]}), - ("wm.context_toggle", {"type": 'Q', "value": 'PRESS', "shift": True, "alt": True}, - {"properties": [("data_path", 'space_data.overlay.use_gpencil_multiedit_line_only')]}), - ] - def km_grease_pencil_stroke_edit_mode(params): items = [] @@ -2283,18 +2281,13 @@ def km_grease_pencil_stroke_edit_mode(params): ) items.extend([ - # Interpolation - ("gpencil.interpolate", {"type": 'E', "value": 'PRESS', "ctrl": True, "alt": True}, None), - ("gpencil.interpolate_sequence", {"type": 'E', "value": 'PRESS', "shift": True, "ctrl": True}, None), # Normal select - ("gpencil.select", {"type": 'LEFTMOUSE', "value": 'PRESS'}, + ("gpencil.select", {"type": 'LEFTMOUSE', "value": 'CLICK'}, {"properties": [("deselect_all", True)]}), # Selection *_grease_pencil_selection(params), # Duplicate and move selected points ("gpencil.duplicate_move", {"type": 'D', "value": 'PRESS', "ctrl": True}, None), - # Extrude and move selected points - ("gpencil.extrude_move", {"type": 'E', "value": 'PRESS'}, None), # Delete op_menu("VIEW3D_MT_edit_gpencil_delete", {"type": 'BACK_SPACE', "value": 'PRESS'}), op_menu("VIEW3D_MT_edit_gpencil_delete", {"type": 'DEL', "value": 'PRESS'}), @@ -2314,20 +2307,13 @@ def km_grease_pencil_stroke_edit_mode(params): ("gpencil.copy", {"type": 'C', "value": 'PRESS', "ctrl": True}, None), ("gpencil.paste", {"type": 'V', "value": 'PRESS', "ctrl": True}, None), # Snap - op_menu("GPENCIL_MT_snap", {"type": 'S', "value": 'PRESS', "shift": True}), + op_menu("GPENCIL_MT_snap", {"type": 'X', "value": 'PRESS', "shift": True}), # Show/hide ("gpencil.reveal", {"type": 'H', "value": 'PRESS', "alt": True}, None), ("gpencil.hide", {"type": 'H', "value": 'PRESS', "ctrl": True}, {"properties": [("unselected", False)]}), - ("gpencil.hide", {"type": 'H', "value": 'PRESS', "shift": True}, - {"properties": [("unselected", True)]}), - ("gpencil.selection_opacity_toggle", {"type": 'H', "value": 'PRESS', "ctrl": True}, None), - # Display - *_grease_pencil_display(), # Isolate layer ("gpencil.layer_isolate", {"type": 'NUMPAD_ASTERIX', "value": 'PRESS'}, None), - # Move to layer - ("gpencil.move_to_layer", {"type": 'G', "value": 'PRESS'}, None), # Transform tools ("transform.translate", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None), ("wm.context_toggle", {"type": 'B', "value": 'PRESS'}, @@ -2343,6 +2329,9 @@ def km_grease_pencil_stroke_edit_mode(params): {"properties": [("mode", 2)]}), # Tools *_template_items_basic_tools(), + op_tool_cycle("builtin.extrude", {"type": 'E', "value": 'PRESS', "ctrl": True}), + op_tool_cycle("builtin.radius", {"type": 'R', "value": 'PRESS', "ctrl": True}), + op_tool_cycle("builtin.bend", {"type": 'B', "value": 'PRESS', "ctrl": True}), ]) @@ -2507,8 +2496,6 @@ def km_grease_pencil_stroke_sculpt_mode(params): {"properties": [("data_path_primary", 'tool_settings.gpencil_sculpt.brush.size')]}), # Context menu *_template_items_context_panel("VIEW3D_PT_gpencil_sculpt_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}), - # Display - *_grease_pencil_display(), ]) return keymap @@ -2536,8 +2523,6 @@ def km_grease_pencil_stroke_weight_mode(params): # Brush size. ("wm.radial_control", {"type": 'S', "value": 'PRESS'}, {"properties": [("data_path_primary", 'tool_settings.gpencil_sculpt.weight_brush.size')]}), - # Display - *_grease_pencil_display(), ]) return keymap @@ -3122,6 +3107,9 @@ def km_mesh(params): ("mesh.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None), ("mesh.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None), ("mesh.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None), + + *_template_items_editmode_mesh_select_mode(params), + # Hide/reveal. ("mesh.hide", {"type": 'H', "value": 'PRESS', "ctrl": True}, {"properties": [("unselected", False)]}), @@ -3584,34 +3572,35 @@ def km_transform_modal_map(_params): # ------------------------------------------------------------------------------ -# Gizmos +# Tool System Keymaps +# +# Named are auto-generated based on the tool name and it's toolbar. -# Fallback for gizmos that don't have custom a custom key-map. -def km_generic_gizmo(_params): - keymap = ( - "Generic Gizmo", - {"space_type": 'EMPTY', "region_type": 'WINDOW'}, - {"items": _template_items_gizmo_tweak_value()}, - ) - return keymap +def km_3d_view_tool_select(params): + return ( + "3D View Tool: Tweak", + {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, + {"items": _template_items_tool_select(params, "view3d.select", extend="toggle")}, + ) -def km_generic_gizmo_drag(_params): - keymap = ( - "Generic Gizmo Drag", - {"space_type": 'EMPTY', "region_type": 'WINDOW'}, - {"items": _template_items_gizmo_tweak_value_drag()}, +def km_image_editor_tool_uv_select(params): + return ( + "Image Editor Tool: Uv, Tweak", + {"space_type": 'IMAGE_EDITOR', "region_type": 'WINDOW'}, + {"items": _template_items_tool_select(params, "uv.select", extend="extend")}, ) - return keymap + +# Fallback for gizmos that don't have custom a custom key-map. -def km_generic_gizmo_click_drag(_params): +def km_generic_gizmo_drag(_params): keymap = ( - "Generic Gizmo Click Drag", + "Generic Gizmo Drag", {"space_type": 'EMPTY', "region_type": 'WINDOW'}, - {"items": _template_items_gizmo_tweak_value_click_drag()}, + {"items": _template_items_gizmo_tweak_value_drag()}, ) return keymap @@ -3630,131 +3619,9 @@ def km_generic_gizmo_maybe_drag(params): # ------------------------------------------------------------------------------ -# Tool System Keymaps - - -def km_3d_view_tool_transform(params): - return ( - "3D View Tool: Transform", - {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, - {"items": [ - ("transform.from_gizmo", {"type": 'MIDDLEMOUSE', "value": 'ANY'}, None), - *_template_items_tool_select_actions("view3d.select_box", type=params.tool_tweak, value='ANY'), - ]}, - ) - - -def km_3d_view_tool_move(params): - return ( - "3D View Tool: Move", - {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, - {"items": [ - ("transform.translate", {"type": 'MIDDLEMOUSE', "value": 'ANY'}, - {"properties": [("release_confirm", True)]}), - *_template_items_tool_select_actions("view3d.select_box", type=params.tool_tweak, value='ANY'), - ]}, - ) - - -def km_3d_view_tool_rotate(params): - return ( - "3D View Tool: Rotate", - {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, - {"items": [ - ("transform.rotate", {"type": 'MIDDLEMOUSE', "value": 'ANY'}, - {"properties": [("release_confirm", True)]}), - *_template_items_tool_select_actions("view3d.select_box", type=params.tool_tweak, value='ANY'), - ]}, - ) - - -def km_3d_view_tool_scale(params): - return ( - "3D View Tool: Scale", - {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, - {"items": [ - ("transform.resize", {"type": 'MIDDLEMOUSE', "value": 'ANY'}, - {"properties": [("release_confirm", True)]}), - *_template_items_tool_select_actions("view3d.select_box", type=params.tool_tweak, value='ANY'), - ]}, - ) - - -def km_3d_view_tool_edit_mesh_extrude_region(params): - return ( - "3D View Tool: Edit Mesh, Extrude Region", - {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, - {"items": [ - ("mesh.extrude_context_move", {"type": 'MIDDLEMOUSE', "value": 'ANY'}, - {"properties": [("TRANSFORM_OT_translate", [("release_confirm", True)])]}), - *_template_items_tool_select_actions("view3d.select_box", type=params.tool_tweak, value='ANY'), - ]}, - ) - - -def km_3d_view_tool_edit_mesh_shear(params): - return ( - "3D View Tool: Edit Mesh, Shear", - {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, - {"items": [ - ("transform.shear", {"type": 'MIDDLEMOUSE', "value": 'ANY'}, - {"properties": [("release_confirm", True)]}), - *_template_items_tool_select_actions("view3d.select_box", type=params.tool_tweak, value='ANY'), - ]}, - ) - - -def km_3d_view_tool_edit_mesh_spin(params): - return ( - "3D View Tool: Edit Mesh, Spin", - {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, - {"items": [ - ("mesh.spin", {"type": 'MIDDLEMOUSE', "value": 'ANY'}, None), - *_template_items_tool_select_actions("view3d.select_box", type=params.tool_tweak, value='ANY'), - ]}, - ) - - -def km_3d_view_tool_edit_mesh_spin_duplicate(params): - return ( - "3D View Tool: Edit Mesh, Spin Duplicates", - {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, - {"items": [ - ("mesh.spin", {"type": 'MIDDLEMOUSE', "value": 'ANY'}, - {"properties": [("dupli", True)]}), - *_template_items_tool_select_actions("view3d.select_box", type=params.tool_tweak, value='ANY'), - ]}, - ) - - -def km_3d_view_tool_edit_curve_extrude(params): - return ( - "3D View Tool: Edit Curve, Extrude", - {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, - {"items": [ - ("curve.extrude_move", {"type": 'MIDDLEMOUSE', "value": 'ANY'}, - {"properties": [("TRANSFORM_OT_translate", [("release_confirm", True)])]}), - *_template_items_tool_select_actions("view3d.select_box", type=params.tool_tweak, value='ANY'), - ]}, - ) - - -def km_3d_view_tool_edit_armature_extrude(params): - return ( - "3D View Tool: Edit Armature, Extrude", - {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, - {"items": [ - ("armature.extrude_move", {"type": 'MIDDLEMOUSE', "value": 'ANY'}, - {"properties": [("TRANSFORM_OT_translate", [("release_confirm", True)])]}), - *_template_items_tool_select_actions("view3d.select_box", type=params.tool_tweak, value='ANY'), - ]}, - ) - - -# ------------------------------------------------------------------------------ # Full Configuration -def generate_keymaps(params=None): +def generate_keymaps_impl(params=None): if params is None: params = Params() return [ @@ -3840,20 +3707,57 @@ def generate_keymaps(params=None): km_transform_modal_map(params), # Gizmos. - km_generic_gizmo(params), km_generic_gizmo_drag(params), km_generic_gizmo_maybe_drag(params), - km_generic_gizmo_click_drag(params), # Tool System. - km_3d_view_tool_transform(params), - km_3d_view_tool_move(params), - km_3d_view_tool_rotate(params), - km_3d_view_tool_scale(params), - km_3d_view_tool_edit_mesh_extrude_region(params), - km_3d_view_tool_edit_mesh_shear(params), - km_3d_view_tool_edit_mesh_spin(params), - km_3d_view_tool_edit_mesh_spin_duplicate(params), - km_3d_view_tool_edit_curve_extrude(params), - km_3d_view_tool_edit_armature_extrude(params), + km_3d_view_tool_select(params), + km_image_editor_tool_uv_select(params), ] + + +def keymap_transform_tool_mmb(keymap): + import re + # Any tool besides fallback tools. + re_fallback_tool = re.compile( + r".*\bTool:\s(?!" + r".*\bSelect Box$|" + r".*\bSelect Circle$|" + r".*\bSelect Lasso$|" + r".*\bTweak$)", + ) + for km_name, km_args, km_content in keymap: + if re_fallback_tool.match(km_name): + km_items = km_content["items"] + km_items_new = [] + for kmi in km_items: + ty = kmi[1]["type"] + if ty == 'LEFTMOUSE': + kmi = (kmi[0], kmi[1].copy(), kmi[2]) + kmi[1]["type"] = 'MIDDLEMOUSE' + km_items_new.append(kmi) + elif ty == 'EVT_TWEAK_L': + kmi = (kmi[0], kmi[1].copy(), kmi[2]) + kmi[1]["type"] = 'EVT_TWEAK_M' + km_items_new.append(kmi) + km_items.extend(km_items_new) + + +def generate_keymaps(params=None): + import os + from bpy.utils import execfile + keymap = generate_keymaps_impl(params) + + # Combine the key-map to support manipulating it, so we don't need to manually + # define key-map here just to manipulate them. + blender_default = execfile( + os.path.join(os.path.dirname(__file__), "blender_default.py"), + ).generate_keymaps() + + keymap_existing_names = {km[0] for km in keymap} + keymap.extend([km for km in blender_default if km[0] not in keymap_existing_names]) + + # Manipulate the key-map. + keymap_transform_tool_mmb(keymap) + + return keymap diff --git a/release/scripts/startup/bl_operators/object.py b/release/scripts/startup/bl_operators/object.py index c42d5970ed9..12d7984b3b2 100644 --- a/release/scripts/startup/bl_operators/object.py +++ b/release/scripts/startup/bl_operators/object.py @@ -743,7 +743,9 @@ class TransformsToDeltas(Operator): def transfer_rotation(self, obj): # TODO: add transforms together... if obj.rotation_mode == 'QUATERNION': - obj.delta_rotation_quaternion += obj.rotation_quaternion + delta = obj.delta_rotation_quaternion.copy() + obj.delta_rotation_quaternion = obj.rotation_quaternion + obj.delta_rotation_quaternion.rotate(delta) if self.reset_values: obj.rotation_quaternion.identity() diff --git a/release/scripts/startup/bl_operators/object_quick_effects.py b/release/scripts/startup/bl_operators/object_quick_effects.py index e49ca0320c7..71153ba8b74 100644 --- a/release/scripts/startup/bl_operators/object_quick_effects.py +++ b/release/scripts/startup/bl_operators/object_quick_effects.py @@ -466,6 +466,13 @@ class QuickLiquid(Operator): self.report({'ERROR'}, "Select at least one mesh object") return {'CANCELLED'} + # set shading type to wireframe so that liquid particles are visible + for area in bpy.context.screen.areas: + if area.type == 'VIEW_3D': + for space in area.spaces: + if space.type == 'VIEW_3D': + space.shading.type = 'WIREFRAME' + for obj in mesh_objects: fake_context["object"] = obj # make each selected object a liquid flow @@ -499,7 +506,6 @@ class QuickLiquid(Operator): # setup liquid domain bpy.ops.object.modifier_add(type='FLUID') obj.modifiers[-1].fluid_type = 'DOMAIN' - obj.modifiers[-1].domain_settings.domain_type = 'LIQUID' # set all domain borders to obstacle obj.modifiers[-1].domain_settings.use_collision_border_front = True obj.modifiers[-1].domain_settings.use_collision_border_back = True @@ -511,8 +517,8 @@ class QuickLiquid(Operator): # set correct cache file format for liquid obj.modifiers[-1].domain_settings.cache_mesh_format = 'BOBJECT' - # allocate and show particle system for FLIP - obj.modifiers[-1].domain_settings.use_flip_particles = True + # change domain type, will also allocate and show particle system for FLIP + obj.modifiers[-1].domain_settings.domain_type = 'LIQUID' # make the domain smooth so it renders nicely bpy.ops.object.shade_smooth() diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py index c811f542a3a..6a21f7db654 100644 --- a/release/scripts/startup/bl_operators/presets.py +++ b/release/scripts/startup/bl_operators/presets.py @@ -501,7 +501,7 @@ class AddPresetTrackingSettings(AddPresetBase, Operator): "settings.use_default_mask", "settings.use_default_red_channel", "settings.use_default_green_channel", - "settings.use_default_blue_channel" + "settings.use_default_blue_channel", "settings.default_weight" ] diff --git a/release/scripts/startup/bl_operators/screen_play_rendered_anim.py b/release/scripts/startup/bl_operators/screen_play_rendered_anim.py index 756d2ff1eeb..3900fc3f2c2 100644 --- a/release/scripts/startup/bl_operators/screen_play_rendered_anim.py +++ b/release/scripts/startup/bl_operators/screen_play_rendered_anim.py @@ -85,12 +85,13 @@ class PlayRenderedAnim(Operator): fps_final = rd.fps / rd.fps_base preset = prefs.filepaths.animation_player_preset - player_path = prefs.filepaths.animation_player # file_path = bpy.path.abspath(rd.filepath) # UNUSED is_movie = rd.is_movie_format # try and guess a command line if it doesn't exist - if player_path == "": + if preset == 'CUSTOM': + player_path = prefs.filepaths.animation_player + else: player_path = guess_player_path(preset) if is_movie is False and preset in {'FRAMECYCLER', 'RV', 'MPLAYER'}: diff --git a/release/scripts/startup/bl_operators/userpref.py b/release/scripts/startup/bl_operators/userpref.py index 4c5c269955a..4cb6ddd3fa3 100644 --- a/release/scripts/startup/bl_operators/userpref.py +++ b/release/scripts/startup/bl_operators/userpref.py @@ -49,6 +49,44 @@ def module_filesystem_remove(path_base, module_name): else: os.remove(f_full) +# This duplicates shutil.copytree from Python 3.8, with the new dirs_exist_ok +# argument that we need. Once we upgrade to 3.8 we can remove this. +def _preferences_copytree(entries, src, dst): + import shutil + import os + os.makedirs(dst, exist_ok=True) + errors = [] + + for srcentry in entries: + srcname = os.path.join(src, srcentry.name) + dstname = os.path.join(dst, srcentry.name) + srcobj = srcentry + try: + if srcentry.is_symlink(): + linkto = os.readlink(srcname) + os.symlink(linkto, dstname) + shutil.copystat(srcobj, dstname, follow_symlinks=False) + elif srcentry.is_dir(): + preferences_copytree(srcobj, dstname) + else: + shutil.copy2(srcentry, dstname) + except Error as err: + errors.extend(err.args[0]) + except OSError as why: + errors.append((srcname, dstname, str(why))) + try: + shutil.copystat(src, dst) + except OSError as why: + if getattr(why, 'winerror', None) is None: + errors.append((src, dst, str(why))) + if errors: + raise Error(errors) + return dst + +def preferences_copytree(src, dst): + import os + with os.scandir(src) as entries: + return _preferences_copytree(entries=entries, src=src, dst=dst) class PREFERENCES_OT_keyconfig_activate(Operator): bl_idname = "preferences.keyconfig_activate" @@ -110,9 +148,10 @@ class PREFERENCES_OT_copy_prev(Operator): return os.path.isfile(old_userpref) and not os.path.isfile(new_userpref) def execute(self, _context): - import shutil - - shutil.copytree(self._old_path(), self._new_path(), symlinks=True) + # Use this instead once we upgrade to Python 3.8 with dirs_exist_ok. + # import shutil + # shutil.copytree(self._old_path(), self._new_path(), dirs_exist_ok=True) + preferences_copytree(self._old_path(), self._new_path()) # reload preferences and recent-files.txt bpy.ops.wm.read_userpref() diff --git a/release/scripts/startup/bl_operators/vertexpaint_dirt.py b/release/scripts/startup/bl_operators/vertexpaint_dirt.py index 39d792bd557..a249599b5d7 100644 --- a/release/scripts/startup/bl_operators/vertexpaint_dirt.py +++ b/release/scripts/startup/bl_operators/vertexpaint_dirt.py @@ -37,6 +37,20 @@ def applyVertexDirt(me, blur_iterations, blur_strength, clamp_dirt, clamp_clean, from math import acos import array + # We simulate the accumulation of dirt in the creases of geometric surfaces + # by comparing the vertex normal to the average direction of all vertices + # connected to that vertex. We can also simulate surfaces being buffed or + # worn by testing protruding surfaces. + # + # So if the angle between the normal and geometric direction is: + # < 90 - dirt has accumulated in the crease + # > 90 - surface has been worn or buffed + # ~ 90 - surface is flat and is generally unworn and clean + # + # This method is limited by the complexity or lack there of in the geometry. + # + # Original code and method by Keith "Wahooney" Boshoff. + vert_tone = array.array("f", [0.0]) * len(me.vertices) # create lookup table for each vertex's connected vertices (via edges) diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py index a677d9932b6..335a2a633cd 100644 --- a/release/scripts/startup/bl_operators/wm.py +++ b/release/scripts/startup/bl_operators/wm.py @@ -1804,9 +1804,6 @@ class WM_OT_toolbar_fallback_pie(Operator): return context.space_data is not None def invoke(self, context, event): - if not context.preferences.experimental.use_tool_fallback: - return {'PASS_THROUGH'} - from bl_ui.space_toolsystem_common import ToolSelectPanelHelper space_type = context.space_data.type cls = ToolSelectPanelHelper._tool_class_from_space_type(space_type) diff --git a/release/scripts/startup/bl_ui/properties_constraint.py b/release/scripts/startup/bl_ui/properties_constraint.py index b75d67b5350..3fc54ff6d12 100644 --- a/release/scripts/startup/bl_ui/properties_constraint.py +++ b/release/scripts/startup/bl_ui/properties_constraint.py @@ -492,6 +492,8 @@ class ConstraintButtonsPanel: col.prop(con, "frame_start", text="Start") col.prop(con, "frame_end", text="End") + layout.prop(con, "mix_mode", text="Mix") + def LOCKED_TRACK(self, _context, layout, con): self.target_template(layout, con) diff --git a/release/scripts/startup/bl_ui/properties_data_camera.py b/release/scripts/startup/bl_ui/properties_data_camera.py index 5d654d33a2d..957b119e9ba 100644 --- a/release/scripts/startup/bl_ui/properties_data_camera.py +++ b/release/scripts/startup/bl_ui/properties_data_camera.py @@ -501,6 +501,7 @@ class DATA_PT_camera_safe_areas_center_cut(CameraButtonsPanel, Panel): col = layout.column() col.prop(safe_data, "title_center", slider=True) + col.prop(safe_data, "action_center", slider=True) class DATA_PT_custom_props_camera(CameraButtonsPanel, PropertyPanel, Panel): diff --git a/release/scripts/startup/bl_ui/properties_data_curve.py b/release/scripts/startup/bl_ui/properties_data_curve.py index d1975919d7e..b694062dfc5 100644 --- a/release/scripts/startup/bl_ui/properties_data_curve.py +++ b/release/scripts/startup/bl_ui/properties_data_curve.py @@ -144,7 +144,6 @@ class DATA_PT_curve_texture_space(CurveButtonsPanel, Panel): curve = context.curve col = layout.column() - col.prop(curve, "use_uv_as_generated") col.prop(curve, "use_auto_texspace") col = layout.column() diff --git a/release/scripts/startup/bl_ui/properties_data_empty.py b/release/scripts/startup/bl_ui/properties_data_empty.py index 4ce87b85410..88fdaae0433 100644 --- a/release/scripts/startup/bl_ui/properties_data_empty.py +++ b/release/scripts/startup/bl_ui/properties_data_empty.py @@ -37,7 +37,6 @@ class DATA_PT_empty(DataButtonsPanel, Panel): def draw(self, context): layout = self.layout layout.use_property_split = True - layout.use_property_decorate = False ob = context.object @@ -45,12 +44,6 @@ class DATA_PT_empty(DataButtonsPanel, Panel): layout.prop(ob, "empty_display_size", text="Size") if ob.empty_display_type == 'IMAGE': - layout.prop(ob, "use_empty_image_alpha") - - col = layout.column() - col.active = ob.use_empty_image_alpha - col.prop(ob, "color", text="Transparency", index=3, slider=True) - col = layout.column(align=True) col.prop(ob, "empty_image_offset", text="Offset X", index=0) col.prop(ob, "empty_image_offset", text="Y", index=1) @@ -63,6 +56,30 @@ class DATA_PT_empty(DataButtonsPanel, Panel): col.prop(ob, "show_empty_image_only_axis_aligned") +class DATA_PT_empty_alpha(DataButtonsPanel, Panel): + bl_label = "Transparency" + bl_parent_id = "DATA_PT_empty" + + @classmethod + def poll(cls, context): + ob = context.object + return (ob and ob.type == 'EMPTY' and ob.empty_display_type == 'IMAGE') + + def draw_header(self, context): + ob = context.object + + self.layout.prop(ob, "use_empty_image_alpha", text="") + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + + ob = context.object + + layout.active = ob.use_empty_image_alpha + layout.prop(ob, "color", text="Opacity", index=3, slider=True) + + class DATA_PT_empty_image(DataButtonsPanel, Panel): bl_label = "Image" @@ -81,6 +98,7 @@ class DATA_PT_empty_image(DataButtonsPanel, Panel): classes = ( DATA_PT_empty, + DATA_PT_empty_alpha, DATA_PT_empty_image, ) diff --git a/release/scripts/startup/bl_ui/properties_data_light.py b/release/scripts/startup/bl_ui/properties_data_light.py index 6f730cf3307..cf894b48e1e 100644 --- a/release/scripts/startup/bl_ui/properties_data_light.py +++ b/release/scripts/startup/bl_ui/properties_data_light.py @@ -134,17 +134,15 @@ class DATA_PT_EEVEE_light_distance(DataButtonsPanel, Panel): light = context.light layout = self.layout - layout.active = light.use_shadow layout.prop(light, "use_custom_distance", text="") def draw(self, context): layout = self.layout light = context.light + layout.active = light.use_custom_distance layout.use_property_split = True - col = layout.column() - - col.prop(light, "cutoff_distance", text="Distance") + layout.prop(light, "cutoff_distance", text="Distance") class DATA_PT_EEVEE_shadow(DataButtonsPanel, Panel): @@ -311,7 +309,8 @@ class DATA_PT_falloff_curve(DataButtonsPanel, Panel): def draw(self, context): light = context.light - self.layout.template_curve_mapping(light, "falloff_curve", use_negative_slope=True) + self.layout.template_curve_mapping( + light, "falloff_curve", use_negative_slope=True) class DATA_PT_custom_props_light(DataButtonsPanel, PropertyPanel, Panel): diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py index d4b2c39bd5e..197566f16f3 100644 --- a/release/scripts/startup/bl_ui/properties_data_modifier.py +++ b/release/scripts/startup/bl_ui/properties_data_modifier.py @@ -293,7 +293,9 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel): col = split.column() col.label(text="Vertex Group:") - col.prop_search(md, "vertex_group", ob, "vertex_groups", text="") + row = col.row(align=True) + row.prop_search(md, "vertex_group", ob, "vertex_groups", text="") + row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT') col = split.column() col.label(text="Control Object:") col.prop(md, "object", text="") diff --git a/release/scripts/startup/bl_ui/properties_data_speaker.py b/release/scripts/startup/bl_ui/properties_data_speaker.py index 5de133f184a..10645bdd214 100644 --- a/release/scripts/startup/bl_ui/properties_data_speaker.py +++ b/release/scripts/startup/bl_ui/properties_data_speaker.py @@ -45,12 +45,10 @@ class DATA_PT_context_speaker(DataButtonsPanel, Panel): speaker = context.speaker space = context.space_data - split = layout.split(factor=0.65) - if ob: - split.template_ID(ob, "data") + layout.template_ID(ob, "data") elif speaker: - split.template_ID(space, "pin_id") + layout.template_ID(space, "pin_id") class DATA_PT_speaker(DataButtonsPanel, Panel): 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 45cb10bb3bd..2001f46820f 100644 --- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py +++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py @@ -581,9 +581,9 @@ class AnnotationDataPanel: def poll(cls, context): # Show this panel as long as someone that might own this exists # AND the owner isn't an object (e.g. GP Object) - if context.gpencil_data_owner is None: + if context.annotation_data_owner is None: return False - elif type(context.gpencil_data_owner) is bpy.types.Object: + elif type(context.annotation_data_owner) is bpy.types.Object: return False else: return True @@ -597,14 +597,14 @@ class AnnotationDataPanel: layout.use_property_decorate = False # Grease Pencil owner. - gpd_owner = context.gpencil_data_owner - gpd = context.gpencil_data + gpd_owner = context.annotation_data_owner + gpd = context.annotation_data # Owner selector. if context.space_data.type == 'CLIP_EDITOR': layout.row().prop(context.space_data, "grease_pencil_source", expand=True) - layout.template_ID(gpd_owner, "grease_pencil", new="gpencil.data_add", unlink="gpencil.data_unlink") + layout.template_ID(gpd_owner, "grease_pencil", new="gpencil.annotation_add", unlink="gpencil.data_unlink") # List of layers/notes. if gpd and gpd.layers: @@ -624,17 +624,17 @@ class AnnotationDataPanel: col = row.column() sub = col.column(align=True) - sub.operator("gpencil.layer_add", icon='ADD', text="") - sub.operator("gpencil.layer_remove", icon='REMOVE', text="") + sub.operator("gpencil.layer_annotation_add", icon='ADD', text="") + sub.operator("gpencil.layer_annotation_remove", icon='REMOVE', text="") - gpl = context.active_gpencil_layer + gpl = context.active_annotation_layer if gpl: if len(gpd.layers) > 1: col.separator() sub = col.column(align=True) - sub.operator("gpencil.layer_move", icon='TRIA_UP', text="").type = 'UP' - sub.operator("gpencil.layer_move", icon='TRIA_DOWN', text="").type = 'DOWN' + sub.operator("gpencil.layer_annotation_move", icon='TRIA_UP', text="").type = 'UP' + sub.operator("gpencil.layer_annotation_move", icon='TRIA_DOWN', text="").type = 'DOWN' tool_settings = context.tool_settings if gpd and gpl: @@ -653,7 +653,7 @@ class AnnotationDataPanel: else: lock_label = iface_("Lock Frame") row.prop(gpl, "lock_frame", text=lock_label, icon='UNLOCKED') - row.operator("gpencil.active_frame_delete", text="", icon='X') + row.operator("gpencil.annotation_active_frame_delete", text="", icon='X') class AnnotationOnionSkin: @@ -665,26 +665,26 @@ class AnnotationOnionSkin: def poll(cls, context): # Show this panel as long as someone that might own this exists # AND the owner isn't an object (e.g. GP Object) - if context.gpencil_data_owner is None: + if context.annotation_data_owner is None: return False - elif type(context.gpencil_data_owner) is bpy.types.Object: + elif type(context.annotation_data_owner) is bpy.types.Object: return False else: - gpl = context.active_gpencil_layer + gpl = context.active_annotation_layer if gpl is None: return False return True def draw_header(self, context): - gpl = context.active_gpencil_layer + gpl = context.active_annotation_layer self.layout.prop(gpl, "use_annotation_onion_skinning", text="") def draw(self, context): layout = self.layout layout.use_property_decorate = False - gpl = context.active_gpencil_layer + gpl = context.active_annotation_layer col = layout.column() split = col.split(factor=0.5) split.active = gpl.use_annotation_onion_skinning diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py index 327df079d3b..a9e8cae3c8b 100644 --- a/release/scripts/startup/bl_ui/properties_paint_common.py +++ b/release/scripts/startup/bl_ui/properties_paint_common.py @@ -121,7 +121,7 @@ class UnifiedPaintPanel: if unified_name and not header: # NOTE: We don't draw UnifiedPaintSettings in the header to reduce clutter. D5928#136281 - row.prop(ups, unified_name, text="", icon="WORLD") + row.prop(ups, unified_name, text="", icon="BRUSHES_ALL") return row @@ -438,7 +438,7 @@ class FalloffPanel(BrushPanel): row.operator("brush.curve_preset", icon='LINCURVE', text="").shape = 'LINE' row.operator("brush.curve_preset", icon='NOCURVE', text="").shape = 'MAX' - if mode in {'SCULPT', 'PAINT_VERTEX', 'PAINT_WEIGHT'}: + if mode in {'SCULPT', 'PAINT_VERTEX', 'PAINT_WEIGHT'} and brush.sculpt_tool != 'POSE': col.separator() row = col.row(align=True) row.use_property_split = True @@ -616,9 +616,12 @@ def brush_settings(layout, context, brush, popover=False): layout.separator() if brush.sculpt_tool == 'POSE': - row = layout.row() - row.prop(brush, "pose_offset") - + layout.separator() + layout.prop(brush, "pose_offset") + layout.prop(brush, "pose_smooth_iterations") + layout.prop(brush, "pose_ik_segments") + layout.separator() + if brush.sculpt_tool == 'SCRAPE': row = layout.row() row.prop(brush, "invert_to_scrape_fill", text="Invert to Fill") diff --git a/release/scripts/startup/bl_ui/properties_particle.py b/release/scripts/startup/bl_ui/properties_particle.py index 21abf8bb34c..3384032e332 100644 --- a/release/scripts/startup/bl_ui/properties_particle.py +++ b/release/scripts/startup/bl_ui/properties_particle.py @@ -582,7 +582,10 @@ class PARTICLE_PT_rotation(ParticleButtonsPanel, Panel): else: part = context.space_data.pin_id - self.layout.prop(part, "use_rotations", text="") + layout = self.layout + layout.prop(part, "use_rotations", text="") + layout.enabled = particle_panel_enabled(context, psys) + def draw(self, context): layout = self.layout @@ -1961,7 +1964,7 @@ class PARTICLE_PT_hair_shape(ParticleButtonsPanel, Panel): layout.prop(part, "shape", text="Strand Shape") col = layout.column(align=True) - col.prop(part, "root_radius", text="Radius Root") + col.prop(part, "root_radius", text="Diameter Root") col.prop(part, "tip_radius", text="Tip") col = layout.column() diff --git a/release/scripts/startup/bl_ui/properties_physics_fluid.py b/release/scripts/startup/bl_ui/properties_physics_fluid.py index 6b0dd7ac36f..28c9895f53b 100644 --- a/release/scripts/startup/bl_ui/properties_physics_fluid.py +++ b/release/scripts/startup/bl_ui/properties_physics_fluid.py @@ -95,6 +95,26 @@ class PhysicButtonsPanel: md = context.fluid return md and (md.fluid_type == 'FLOW') + @staticmethod + def poll_fluid_flow_outflow(context): + if not PhysicButtonsPanel.poll_fluid_flow(context): + return False + + md = context.fluid + flow = md.flow_settings + if (flow.flow_behavior == 'OUTFLOW'): + return True + + @staticmethod + def poll_fluid_flow_liquid(context): + if not PhysicButtonsPanel.poll_fluid_flow(context): + return False + + md = context.fluid + flow = md.flow_settings + if (flow.flow_type == 'LIQUID'): + return True + class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel): bl_label = "Fluid" @@ -313,9 +333,9 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel, Panel): flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False) flow.enabled = not is_baking_any and not has_baked_data - col = flow.column() - col.prop(domain, "alpha") - col.prop(domain, "beta", text="Temperature Diff.") + col = flow.column(align=True) + col.prop(domain, "alpha", text="Buoyancy Density") + col.prop(domain, "beta", text="Heat") col = flow.column() col.prop(domain, "vorticity") @@ -389,14 +409,12 @@ class PHYSICS_PT_fire(PhysicButtonsPanel, Panel): col = flow.column() col.prop(domain, "burning_rate", text="Reaction Speed") - col = flow.column() + col = flow.column(align=True) col.prop(domain, "flame_smoke", text="Flame Smoke") - col = flow.column() - col.prop(domain, "flame_vorticity", text="Flame Vorticity") - col = flow.column() - col.prop(domain, "flame_ignition", text="Temperature Ignition") - col = flow.column() - col.prop(domain, "flame_max_temp", text="Maximum Temperature") + col.prop(domain, "flame_vorticity", text="Vorticity") + col = flow.column(align=True) + col.prop(domain, "flame_max_temp", text="Temperature Maximum") + col.prop(domain, "flame_ignition", text="Minimum") col = flow.column() col.prop(domain, "flame_smoke_color", text="Flame Color") @@ -485,10 +503,10 @@ class PHYSICS_PT_flow_source(PhysicButtonsPanel, Panel): col = grid.column() if flow.flow_source == 'MESH': col.prop(flow, "use_plane_init", text="Is Planar") - col.prop(flow, "surface_distance", text="Surface Thickness") + col.prop(flow, "surface_distance", text="Surface Emission") if flow.flow_type in {'SMOKE', 'BOTH', 'FIRE'}: col = grid.column() - col.prop(flow, "volume_density", text="Volume Density") + col.prop(flow, "volume_density", text="Volume Emission") if flow.flow_source == 'PARTICLES': col.prop(flow, "use_particle_size", text="Set Size") @@ -507,6 +525,9 @@ class PHYSICS_PT_flow_initial_velocity(PhysicButtonsPanel, Panel): if not PhysicButtonsPanel.poll_fluid_flow(context): return False + if PhysicButtonsPanel.poll_fluid_flow_outflow(context): + return False + return (context.engine in cls.COMPAT_ENGINES) def draw_header(self, context): @@ -546,6 +567,12 @@ class PHYSICS_PT_flow_texture(PhysicButtonsPanel, Panel): if not PhysicButtonsPanel.poll_fluid_flow(context): return False + if PhysicButtonsPanel.poll_fluid_flow_outflow(context): + return False + + if PhysicButtonsPanel.poll_fluid_flow_liquid(context): + return False + return (context.engine in cls.COMPAT_ENGINES) def draw_header(self, context): @@ -1088,13 +1115,7 @@ class PHYSICS_PT_cache(PhysicButtonsPanel, Panel): col.separator() split = layout.split() - bake_incomplete = (domain.cache_frame_pause_data < domain.cache_frame_end) - if domain.has_cache_baked_data and not domain.is_cache_baking_data and bake_incomplete: - col = split.column() - col.operator("fluid.bake_all", text="Resume") - col = split.column() - col.operator("fluid.free_all", text="Free") - elif domain.is_cache_baking_data and not domain.has_cache_baked_data: + if domain.is_cache_baking_data and not domain.has_cache_baked_data: split.enabled = False split.operator("fluid.pause_bake", text="Baking All - ESC to pause") elif not domain.has_cache_baked_data and not domain.is_cache_baking_data: diff --git a/release/scripts/startup/bl_ui/space_dopesheet.py b/release/scripts/startup/bl_ui/space_dopesheet.py index 5a73ff094a2..a09e263fd87 100644 --- a/release/scripts/startup/bl_ui/space_dopesheet.py +++ b/release/scripts/startup/bl_ui/space_dopesheet.py @@ -542,8 +542,8 @@ class DOPESHEET_MT_gpencil_channel(Menu): # layout.operator("anim.channels_expand") # layout.operator("anim.channels_collapse") - # layout.separator() - #layout.operator_menu_enum("anim.channels_move", "direction", text="Move...") + layout.separator() + layout.operator_menu_enum("anim.channels_move", "direction", text="Move...") class DOPESHEET_MT_gpencil_frame(Menu): diff --git a/release/scripts/startup/bl_ui/space_info.py b/release/scripts/startup/bl_ui/space_info.py index 82ed701aa4c..cd65980fc0d 100644 --- a/release/scripts/startup/bl_ui/space_info.py +++ b/release/scripts/startup/bl_ui/space_info.py @@ -92,7 +92,7 @@ class INFO_MT_area(Menu): layout.separator() - layout.operator("screen.area_dupli", icon='DUPLICATE') + layout.operator("screen.area_dupli", icon='WINDOW') layout.separator() diff --git a/release/scripts/startup/bl_ui/space_nla.py b/release/scripts/startup/bl_ui/space_nla.py index 28b67c93666..4ecc4e7fdd9 100644 --- a/release/scripts/startup/bl_ui/space_nla.py +++ b/release/scripts/startup/bl_ui/space_nla.py @@ -167,6 +167,7 @@ class NLA_MT_edit(Menu): layout.operator("nla.duplicate", text="Linked Duplicate").linked = True layout.operator("nla.split") layout.operator("nla.delete") + layout.operator("nla.tracks_delete") layout.separator() layout.operator("nla.mute_toggle") diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index 097564444d0..af0c23e7892 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -30,6 +30,9 @@ from bpy.app.translations import ( from bl_ui.properties_grease_pencil_common import ( AnnotationDataPanel, ) +from bl_ui.space_toolsystem_common import ( + ToolActivePanelHelper, +) from rna_prop_ui import PropertyPanel @@ -89,6 +92,35 @@ def draw_color_balance(layout, color_balance): split.template_color_picker(color_balance, "gain", value_slider=True, lock_luminosity=True, cubic=True) +class SEQUENCER_PT_active_tool(ToolActivePanelHelper, Panel): + bl_space_type = 'SEQUENCE_EDITOR' + bl_region_type = 'UI' + bl_category = "Tool" + + +class SEQUENCER_HT_tool_header(Header): + bl_space_type = 'SEQUENCE_EDITOR' + bl_region_type = 'TOOL_HEADER' + + def draw(self, context): + layout = self.layout + + layout.template_header() + + self.draw_tool_settings(context) + + # TODO: options popover. + + def draw_tool_settings(self, context): + layout = self.layout + + # Active Tool + # ----------- + from bl_ui.space_toolsystem_common import ToolSelectPanelHelper + tool = ToolSelectPanelHelper.draw_active_tool_header(context, layout) + tool_mode = context.mode if tool is None else tool.mode + + class SEQUENCER_HT_header(Header): bl_space_type = 'SEQUENCE_EDITOR' @@ -97,7 +129,10 @@ class SEQUENCER_HT_header(Header): st = context.space_data - layout.template_header() + show_region_tool_header = st.show_region_tool_header + + if not show_region_tool_header: + layout.template_header() layout.prop(st, "view_type", text="") @@ -226,8 +261,12 @@ class SEQUENCER_MT_view(Menu): # wm_keymap_item_find_props() (see #32595). layout.operator_context = 'INVOKE_REGION_PREVIEW' layout.prop(st, "show_region_ui") + layout.prop(st, "show_region_toolbar") layout.operator_context = 'INVOKE_DEFAULT' + if is_sequencer_view: + layout.prop(st, "show_region_hud") + if st.view_type == 'SEQUENCER': layout.prop(st, "show_backdrop", text="Preview as Backdrop") @@ -268,6 +307,7 @@ class SEQUENCER_MT_view(Menu): layout.operator_context = 'INVOKE_DEFAULT' layout.prop(st, "show_seconds") + layout.prop(st, "show_locked_time") layout.prop(st, "show_strip_offset") layout.separator() layout.prop(st, "show_markers") @@ -2128,6 +2168,7 @@ class SEQUENCER_PT_custom_props(SequencerButtonsPanel, PropertyPanel, Panel): classes = ( SEQUENCER_MT_change, + SEQUENCER_HT_tool_header, SEQUENCER_HT_header, SEQUENCER_MT_editor_menus, SEQUENCER_MT_range, @@ -2153,7 +2194,7 @@ classes = ( SEQUENCER_MT_strip_input, SEQUENCER_MT_strip_lock_mute, SEQUENCER_MT_context_menu, - + SEQUENCER_PT_active_tool, SEQUENCER_PT_strip, SEQUENCER_PT_effect, diff --git a/release/scripts/startup/bl_ui/space_text.py b/release/scripts/startup/bl_ui/space_text.py index 81ccc9216a1..b7c5dcd5437 100644 --- a/release/scripts/startup/bl_ui/space_text.py +++ b/release/scripts/startup/bl_ui/space_text.py @@ -30,7 +30,7 @@ class TEXT_HT_header(Header): st = context.space_data text = st.text - + is_syntax_highlight_supported = st.is_syntax_highlight_supported() layout.template_header() TEXT_MT_editor_menus.draw_collapsible(context, layout) @@ -43,7 +43,18 @@ class TEXT_HT_header(Header): layout.separator_spacer() row = layout.row(align=True) - row.template_ID(st, "text", new="text.new", unlink="text.unlink", open="text.open") + row.template_ID(st, "text", new="text.new", + unlink="text.unlink", open="text.open") + + if text: + is_osl = text.name.endswith((".osl", ".osl")) + if is_osl: + row.operator("node.shader_script_update", + text="", icon='FILE_REFRESH') + else: + row = layout.row() + row.active = is_syntax_highlight_supported + row.operator("text.run_script", text="", icon='PLAY') layout.separator_spacer() @@ -51,28 +62,10 @@ class TEXT_HT_header(Header): row.prop(st, "show_line_numbers", text="") row.prop(st, "show_word_wrap", text="") - is_syntax_highlight_supported = st.is_syntax_highlight_supported() syntax = row.row(align=True) syntax.active = is_syntax_highlight_supported syntax.prop(st, "show_syntax_highlight", text="") - if text: - text_name = text.name - is_osl = text_name.endswith((".osl", ".oso")) - - row = layout.row() - if is_osl: - row = layout.row() - row.operator("node.shader_script_update") - else: - row = layout.row() - row.active = text_name.endswith(".py") - row.prop(text, "use_module") - - row = layout.row() - row.active = is_syntax_highlight_supported - row.operator("text.run_script") - class TEXT_HT_footer(Header): bl_space_type = 'TEXT_EDITOR' diff --git a/release/scripts/startup/bl_ui/space_toolsystem_common.py b/release/scripts/startup/bl_ui/space_toolsystem_common.py index 7b0a769ae62..4dc724299f0 100644 --- a/release/scripts/startup/bl_ui/space_toolsystem_common.py +++ b/release/scripts/startup/bl_ui/space_toolsystem_common.py @@ -354,6 +354,16 @@ class ToolSelectPanelHelper: i += 1 return None, -1 + @classmethod + def _tool_group_active_set_by_id(cls, context, idname_group, idname): + item_group = cls._tool_get_group_by_id(context, idname_group, coerce=True) + if item_group: + for i, item in enumerate(item_group): + if item and item.idname == idname: + cls._tool_group_active[item_group[0].idname] = i + return True + return False + @staticmethod def _tool_active_from_context(context, space_type, mode=None, create=False): if space_type in {'VIEW_3D', 'PROPERTIES'}: @@ -380,6 +390,14 @@ class ToolSelectPanelHelper: if tool is not None: tool.refresh_from_context() return tool + elif space_type == 'SEQUENCE_EDITOR': + space_data = context.space_data + if mode is None: + mode = space_data.view_type + tool = context.workspace.tools.from_space_sequencer(mode, create=create) + if tool is not None: + tool.refresh_from_context() + return tool return None @staticmethod @@ -646,6 +664,8 @@ class ToolSelectPanelHelper: return space_type, space_data.mode elif space_type == 'NODE_EDITOR': return space_type, None + elif space_type == 'SEQUENCE_EDITOR': + return space_type, context.space_data.view_type else: return None, None @@ -660,10 +680,10 @@ class ToolSelectPanelHelper: *, is_horizontal_layout=False, ): - tool_fallback = tool.tool_fallback + idname_fallback = tool.idname_fallback space_type = tool.space_type cls = ToolSelectPanelHelper._tool_class_from_space_type(space_type) - item_fallback, _index = cls._tool_get_by_id(context, tool_fallback) + item_fallback, _index = cls._tool_get_by_id(context, idname_fallback) if item_fallback is not None: draw_settings = item_fallback.draw_settings if draw_settings is not None: @@ -699,12 +719,8 @@ class ToolSelectPanelHelper: if draw_settings is not None: draw_settings(context, layout, tool) - if context.preferences.experimental.use_tool_fallback: - tool_fallback = tool.tool_fallback - else: - tool_fallback = None - - if tool_fallback and tool_fallback != item.idname: + idname_fallback = tool.idname_fallback + if idname_fallback and idname_fallback != item.idname: tool_settings = context.tool_settings # Show popover which looks like an enum but isn't one. @@ -862,6 +878,7 @@ class WM_MT_toolsystem_submenu(Menu): def _activate_by_item(context, space_type, item, index, *, as_fallback=False): cls = ToolSelectPanelHelper._tool_class_from_space_type(space_type) + tool = ToolSelectPanelHelper._tool_active_from_context(context, space_type, create=True) tool_fallback_id = cls.tool_fallback_id if as_fallback: @@ -889,6 +906,12 @@ def _activate_by_item(context, space_type, item, index, *, as_fallback=False): # Done, now get the current tool to replace the item & index. tool_active = ToolSelectPanelHelper._tool_active_from_context(context, space_type) item, index = cls._tool_get_by_id(context, getattr(tool_active, "idname", None)) + else: + # Ensure the active fallback tool is read from saved state (even if the fallback tool is not in use). + stored_idname_fallback = tool.idname_fallback + if stored_idname_fallback: + cls._tool_group_active_set_by_id(context, tool_fallback_id, stored_idname_fallback) + del stored_idname_fallback # Find fallback keymap. item_fallback = None @@ -897,7 +920,6 @@ def _activate_by_item(context, space_type, item, index, *, as_fallback=False): item_fallback, _index = cls._tool_get_active_by_index(context, select_index) # End calculating fallback. - tool = ToolSelectPanelHelper._tool_active_from_context(context, space_type, create=True) tool.setup( idname=item.idname, keymap=item.keymap[0] if item.keymap is not None else "", diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py index 5f017e61db7..c1ad196b555 100644 --- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py +++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py @@ -134,6 +134,7 @@ class _defs_view3d_generic: idname="builtin.measure", label="Measure", description=description, + cursor='CROSSHAIR', icon="ops.view3d.ruler", widget="VIEW3D_GGT_ruler", keymap="3D View Tool: Measure", @@ -292,16 +293,29 @@ class _defs_transform: ) @ToolDef.from_fn + def shear(): + def draw_settings(context, layout, _tool): + # props = tool.operator_properties("transform.shear") + _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index(context, layout, 2) + return dict( + idname="builtin.shear", + label="Shear", + icon="ops.transform.shear", + widget="VIEW3D_GGT_xform_shear", + keymap="3D View Tool: Shear", + draw_settings=draw_settings, + ) + + @ToolDef.from_fn def transform(): def draw_settings(context, layout, tool): if layout.use_property_split: layout.label(text="Gizmos:") show_drag = True - if context.preferences.experimental.use_tool_fallback: - tool_settings = context.tool_settings - if tool_settings.workspace_tool_type == 'FALLBACK': - show_drag = False + tool_settings = context.tool_settings + if tool_settings.workspace_tool_type == 'FALLBACK': + show_drag = False if show_drag: props = tool.gizmo_group_properties("VIEW3D_GGT_xform_gizmo") @@ -362,6 +376,7 @@ class _defs_view3d_select: label="Select Lasso", icon="ops.generic.select_lasso", widget=None, + cursor='DEFAULT', keymap="3D View Tool: Select Lasso", draw_settings=draw_settings, ) @@ -386,6 +401,7 @@ class _defs_view3d_select: label="Select Circle", icon="ops.generic.select_circle", widget=None, + cursor='DEFAULT', keymap="3D View Tool: Select Circle", draw_settings=draw_settings, draw_cursor=draw_cursor, @@ -764,20 +780,6 @@ class _defs_edit_mesh: ) @ToolDef.from_fn - def shear(): - def draw_settings(context, layout, _tool): - # props = tool.operator_properties("transform.shear") - _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index(context, layout, 2) - return dict( - idname="builtin.shear", - label="Shear", - icon="ops.transform.shear", - widget="VIEW3D_GGT_xform_shear", - keymap=(), - draw_settings=draw_settings, - ) - - @ToolDef.from_fn def tosphere(): return dict( idname="builtin.to_sphere", @@ -1708,6 +1710,51 @@ class _defs_node_edit: keymap="Node Tool: Links Cut", ) +class _defs_sequencer_generic: + + @ToolDef.from_fn + def cut(): + def draw_settings(_context, layout, tool): + props = tool.operator_properties("sequencer.cut") + row = layout.row() + row.use_property_split = False + row.prop(props, "type", expand=True) + return dict( + idname="builtin.cut", + label="Cut", + icon="ops.mesh.knife_tool", + widget=None, + keymap="Sequencer Tool: Cut", + draw_settings=draw_settings, + ) + +class _defs_sequencer_select: + @ToolDef.from_fn + def select(): + return dict( + idname="builtin.select", + label="Select", + icon="ops.generic.select", + widget=None, + keymap="Sequencer Tool: Select", + ) + @ToolDef.from_fn + def box(): + def draw_settings(_context, layout, tool): + props = tool.operator_properties("sequencer.select_box") + row = layout.row() + row.use_property_split = False + row.prop(props, "mode", text="", expand=True, icon_only=True) + pass + return dict( + idname="builtin.select_box", + label="Select Box", + icon="ops.generic.select_box", + widget=None, + keymap="Sequencer Tool: Select Box", + draw_settings=draw_settings, + ) + class IMAGE_PT_tools_active(ToolSelectPanelHelper, Panel): bl_space_type = 'IMAGE_EDITOR' @@ -1961,6 +2008,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_edit_armature.extrude, _defs_edit_armature.extrude_cursor, ), + _defs_transform.shear, ], 'EDIT_MESH': [ *_tools_default, @@ -1999,7 +2047,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_edit_mesh.push_pull, ), ( - _defs_edit_mesh.shear, + _defs_transform.shear, _defs_edit_mesh.tosphere, ), ( @@ -2019,16 +2067,23 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_edit_curve.curve_radius, _defs_edit_curve.tilt, None, + _defs_transform.shear, _defs_edit_curve.curve_vertex_randomize, ], 'EDIT_SURFACE': [ *_tools_default, + None, + _defs_transform.shear, ], 'EDIT_METABALL': [ *_tools_default, + None, + _defs_transform.shear, ], 'EDIT_LATTICE': [ *_tools_default, + None, + _defs_transform.shear, ], 'EDIT_TEXT': [ _defs_view3d_generic.cursor, @@ -2116,6 +2171,8 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_gpencil_paint.curve, _defs_gpencil_paint.box, _defs_gpencil_paint.circle, + None, + *_tools_annotate, ], 'EDIT_GPENCIL': [ *_tools_gpencil_select, @@ -2130,11 +2187,13 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_gpencil_edit.shear, _defs_gpencil_edit.tosphere, ), - + None, + *_tools_annotate, ], 'SCULPT_GPENCIL': [ _defs_gpencil_sculpt.generate_from_brushes, None, + *_tools_annotate, lambda context: ( VIEW3D_PT_tools_active._tools_gpencil_select if _defs_gpencil_sculpt.poll_select_mask(context) @@ -2143,14 +2202,75 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): ], 'WEIGHT_GPENCIL': [ _defs_gpencil_weight.generate_from_brushes, + None, + *_tools_annotate, ], } +class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, Panel): + bl_space_type = 'SEQUENCE_EDITOR' + bl_region_type = 'TOOLS' + bl_label = "Tools" # not visible + bl_options = {'HIDE_HEADER'} + + # Satisfy the 'ToolSelectPanelHelper' API. + keymap_prefix = "Sequence Editor Tool:" + + # Default group to use as a fallback. + tool_fallback_id = "builtin.select" + @classmethod + def tools_from_context(cls, context, mode=None): + if mode is None: + if context.space_data: + mode = context.space_data.view_type + for tools in (cls._tools[None], cls._tools.get(mode, ())): + for item in tools: + if not (type(item) is ToolDef) and callable(item): + yield from item(context) + else: + yield item + + @classmethod + def tools_all(cls): + yield from cls._tools.items() + + _tools_select = ( + ( + _defs_sequencer_select.select, + _defs_sequencer_select.box, + ), + ) + _tools_annotate = ( + ( + _defs_annotate.scribble, + _defs_annotate.line, + _defs_annotate.poly, + _defs_annotate.eraser, + ), + ) + + _tools = { + None: [ + ], + 'PREVIEW': [ + *_tools_annotate, + ], + 'SEQUENCER': [ + *_tools_select, + _defs_sequencer_generic.cut, + ], + 'SEQUENCER_PREVIEW': [ + *_tools_select, + *_tools_annotate, + _defs_sequencer_generic.cut, + ], + } classes = ( IMAGE_PT_tools_active, NODE_PT_tools_active, VIEW3D_PT_tools_active, + SEQUENCER_PT_tools_active, ) if __name__ == "__main__": # only for live edit. diff --git a/release/scripts/startup/bl_ui/space_topbar.py b/release/scripts/startup/bl_ui/space_topbar.py index 7dbf49d01e3..fd46bd53cd2 100644 --- a/release/scripts/startup/bl_ui/space_topbar.py +++ b/release/scripts/startup/bl_ui/space_topbar.py @@ -471,7 +471,7 @@ class TOPBAR_MT_file_export(Menu): text="Collada (Default) (.dae)") if bpy.app.build_options.alembic: self.layout.operator("wm.alembic_export", text="Alembic (.abc)") - if bpy.app.build_options.usd and context.preferences.experimental.use_usd_exporter: + if bpy.app.build_options.usd: self.layout.operator( "wm.usd_export", text="Universal Scene Description (.usd, .usdc, .usda)") diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index 9527c7f4de8..ad5e7b5442c 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -997,6 +997,7 @@ class PreferenceThemeSpacePanel: "freestyle_face_mark", "split_normal", "bone_solid", + "bone_locked_weight", "paint_curve_pivot", }, 'GRAPH_EDITOR': { @@ -2003,7 +2004,7 @@ class USERPREF_PT_studiolight_matcaps(StudioLightPanel, StudioLightPanelMixin, P class USERPREF_PT_studiolight_world(StudioLightPanel, StudioLightPanelMixin, Panel): - bl_label = "LookDev HDRIs" + bl_label = "HDRIs" sl_type = 'WORLD' def draw_header_preset(self, _context): @@ -2087,26 +2088,6 @@ class ExperimentalPanel: url_prefix = "https://developer.blender.org/" - -class USERPREF_PT_experimental_ui(ExperimentalPanel, Panel): - bl_label = "User Interface" - - def draw(self, context): - prefs = context.preferences - experimental = prefs.experimental - - layout = self.layout - layout.use_property_split = True - layout.use_property_decorate = False - - task = "T66304" - split = layout.split(factor=0.66) - col = split.column() - col.prop(experimental, "use_tool_fallback", text="Use Tool Fallback") - col = split.column() - col.operator("wm.url_open", text=task, icon='URL').url = self.url_prefix + task - - """ # Example panel, leave it here so we always have a template to follow even # after the features are gone from the experimental panel. @@ -2114,10 +2095,14 @@ class USERPREF_PT_experimental_ui(ExperimentalPanel, Panel): class USERPREF_PT_experimental_virtual_reality(ExperimentalPanel, Panel): bl_label = "Virtual Reality" - def draw_centered(self, context, layout): + def draw(self, context): prefs = context.preferences experimental = prefs.experimental + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + task = "T71347" split = layout.split(factor=0.66) col = split.split() @@ -2134,30 +2119,6 @@ class USERPREF_PT_experimental_virtual_reality(ExperimentalPanel, Panel): """ -class USERPREF_PT_experimental_usd(ExperimentalPanel, Panel): - bl_label = "Universal Scene Description" - - @classmethod - def poll(cls, context): - # Only show the panel if Blender was actually built with USD support. - return getattr(bpy.app.build_options, "usd", False) - - def draw(self, context): - prefs = context.preferences - experimental = prefs.experimental - - layout = self.layout - layout.use_property_split = True - layout.use_property_decorate = False - - split = layout.split(factor=0.66) - col = split.split() - col.prop(experimental, "use_usd_exporter", text="USD Exporter") - col = split.split() - url = "https://devtalk.blender.org/t/universal-scene-description-usd-exporter-feedback/10920" - col.operator("wm.url_open", text='Give Feedback', icon='URL').url = url - - # ----------------------------------------------------------------------------- # Class Registration @@ -2242,9 +2203,6 @@ classes = ( USERPREF_PT_studiolight_matcaps, USERPREF_PT_studiolight_world, - USERPREF_PT_experimental_ui, - USERPREF_PT_experimental_usd, - # Popovers. USERPREF_PT_ndof_settings, diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 48e40554cfb..aa8f343e1a0 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -621,15 +621,19 @@ class VIEW3D_HT_header(Header): tool_settings = context.tool_settings view = context.space_data shading = view.shading - # mode_string = context.mode - obj = context.active_object show_region_tool_header = view.show_region_tool_header if not show_region_tool_header: layout.row(align=True).template_header() row = layout.row(align=True) + obj = context.active_object + # mode_string = context.mode object_mode = 'OBJECT' if obj is None else obj.mode + has_pose_mode = ( + (object_mode == 'POSE') or + (object_mode == 'WEIGHT_PAINT' and context.pose_object is not None) + ) # Note: This is actually deadly in case enum_items have to be dynamically generated # (because internal RNA array iterator will free everything immediately...). @@ -780,10 +784,13 @@ class VIEW3D_HT_header(Header): "view3d.toggle_xray", text="", icon='XRAY', - depress=getattr( - shading, - "show_xray_wireframe" if shading.type == 'WIREFRAME' else - "show_xray" + depress=( + overlay.show_xray_bone if has_pose_mode else + getattr( + shading, + "show_xray_wireframe" if shading.type == 'WIREFRAME' else + "show_xray" + ) ), ) @@ -918,7 +925,7 @@ class VIEW3D_MT_transform_base(Menu): if context.mode != 'OBJECT': layout.operator("transform.vertex_warp", text="Warp") layout.operator_context = 'EXEC_DEFAULT' - layout.operator("transform.vertex_random", text="Randomize") + layout.operator("transform.vertex_random", text="Randomize").offset = 0.1 layout.operator_context = 'INVOKE_REGION_WIN' @@ -3530,8 +3537,8 @@ class VIEW3D_MT_edit_mesh_context_menu(Menu): col.operator("transform.shear", text="Shear") col.operator("transform.vert_slide", text="Slide Vertices") col.operator_context = 'EXEC_DEFAULT' - col.operator("transform.vertex_random", text="Randomize Vertices") - col.operator("mesh.vertices_smooth", text="Smooth Vertices") + col.operator("transform.vertex_random", text="Randomize Vertices").offset = 0.1 + col.operator("mesh.vertices_smooth", text="Smooth Vertices").factor = 0.5 col.operator_context = 'INVOKE_REGION_WIN' col.operator("mesh.vertices_smooth_laplacian", text="Smooth Laplacian") @@ -3747,7 +3754,7 @@ class VIEW3D_MT_edit_mesh_vertices(Menu): layout.operator("transform.vert_slide", text="Slide Vertices") layout.operator_context = 'EXEC_DEFAULT' - layout.operator("mesh.vertices_smooth", text="Smooth Vertices") + layout.operator("mesh.vertices_smooth", text="Smooth Vertices").factor = 0.5 layout.operator_context = 'INVOKE_REGION_WIN' layout.separator() diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py index f0c4aaa9344..19d5e3da309 100644 --- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py +++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py @@ -313,7 +313,7 @@ class VIEW3D_PT_tools_posemode_options(View3DPanel, Panel): layout.prop(pose, "use_auto_ik") layout.prop(pose, "use_mirror_x") col = layout.column() - col.active = pose.use_mirror_x + col.active = pose.use_mirror_x and not pose.use_auto_ik col.prop(pose, "use_mirror_relative") layout.label(text="Affect Only") @@ -560,12 +560,23 @@ class VIEW3D_PT_slots_projectpaint(View3DPanel, Panel): layout.operator("image.save_all_modified", text="Save All Images", icon='FILE_TICK') +class VIEW3D_PT_mask(View3DPanel, Panel): + bl_category = "Tool" + bl_context = ".imagepaint" # dot on purpose (access from topbar) + bl_label = "Masking" + bl_options = {'DEFAULT_CLOSED'} + + def draw(self, context): + pass + + # TODO, move to space_view3d.py class VIEW3D_PT_stencil_projectpaint(View3DPanel, Panel): bl_category = "Tool" bl_context = ".imagepaint" # dot on purpose (access from topbar) - bl_label = "Mask" + bl_label = "Stencil Mask" bl_options = {'DEFAULT_CLOSED'} + bl_parent_id = "VIEW3D_PT_mask" bl_ui_units_x = 14 @classmethod @@ -1192,6 +1203,7 @@ class VIEW3D_PT_tools_imagepaint_options_cavity(View3DPaintPanel, Panel): bl_context = ".imagepaint" # dot on purpose (access from topbar) bl_label = "Cavity Mask" bl_parent_id = "VIEW3D_PT_tools_imagepaint_options" + bl_parent_id = "VIEW3D_PT_mask" bl_options = {'DEFAULT_CLOSED'} def draw_header(self, context): @@ -1876,7 +1888,7 @@ classes = ( VIEW3D_PT_tools_curveedit_options_stroke, VIEW3D_PT_tools_armatureedit_options, VIEW3D_PT_tools_posemode_options, - + VIEW3D_PT_slots_projectpaint, VIEW3D_PT_tools_brush_select, VIEW3D_PT_tools_brush_settings, @@ -1886,7 +1898,6 @@ classes = ( VIEW3D_PT_tools_brush_clone, TEXTURE_UL_texpaintslots, VIEW3D_MT_tools_projectpaint_uvlayer, - VIEW3D_PT_stencil_projectpaint, VIEW3D_PT_tools_brush_texture, VIEW3D_PT_tools_mask_texture, VIEW3D_PT_tools_brush_stroke, @@ -1912,9 +1923,13 @@ classes = ( VIEW3D_PT_tools_vertexpaint_symmetry_for_topbar, VIEW3D_PT_tools_vertexpaint_options, + VIEW3D_PT_mask, + VIEW3D_PT_stencil_projectpaint, + VIEW3D_PT_tools_imagepaint_options_cavity, + VIEW3D_PT_tools_imagepaint_symmetry, VIEW3D_PT_tools_imagepaint_options, - VIEW3D_PT_tools_imagepaint_options_cavity, + VIEW3D_PT_tools_imagepaint_options_external, VIEW3D_MT_tools_projectpaint_stencil, |