Compare commits
221 Commits
temp_test_
...
temp-geome
Author | SHA1 | Date | |
---|---|---|---|
29704854df | |||
015bde6145 | |||
8d19ceaee7 | |||
d62cf98164 | |||
655223e4c6 | |||
54cc128a31 | |||
fa5a9b0f6a | |||
cffd4a7ccf | |||
2012469acc | |||
713da0fcc4 | |||
8ba889a4be | |||
5cd7e557ae | |||
584af77101 | |||
d53e400454 | |||
64d1fe3450 | |||
4b091f2eb6 | |||
e70f9b0d0e | |||
d2d10e63c9 | |||
b51f68d780 | |||
c3adfd6d5d | |||
edac56b414 | |||
8c76ca6a53 | |||
0bd2b314e8 | |||
2963be588d | |||
507f2628fd | |||
c227b4da17 | |||
605f145aba | |||
deb7cd5783 | |||
cb0a78cb8f | |||
70e3b6d11f | |||
e041389c68 | |||
38574e37cc | |||
8186dddec1 | |||
47fa00ffef | |||
62f8bb87b7 | |||
5617cb5500 | |||
a4d4188c8d | |||
f487dbae97 | |||
94b98d3f88 | |||
32f101c603 | |||
2feed5ce33 | |||
f7b9114eec | |||
7f017a51bb | |||
efbe1ea8c7 | |||
2b38770ebd | |||
5a96096c5e | |||
ce1519d804 | |||
bd1375f9cb | |||
af641d0912 | |||
6c0ae5e890 | |||
fac0723e92 | |||
68a8a89c49 | |||
8c9432be6a | |||
6e08de6028 | |||
00ed599fe4 | |||
769c7521b5 | |||
e23ccfe913 | |||
7398076be2 | |||
ea98f53dcd | |||
70cbbd614f | |||
95288eba59 | |||
01037308d5 | |||
1765e1b20a | |||
7cb4665bee | |||
d6bddbef2d | |||
fcfec33cf7 | |||
e338ebb720 | |||
741deadff4 | |||
c1cab4aa68 | |||
bf6b04bf89 | |||
a275572e0b | |||
9ec7e23c44 | |||
3c5681c212 | |||
28f1e71e2e | |||
149fd7b65f | |||
a55c230b8a | |||
1f1dc4ade3 | |||
d445ee4c73 | |||
73e52ab55f | |||
3fec225931 | |||
f0443b8859 | |||
b73f692919 | |||
4aeb9dc996 | |||
3b12594054 | |||
0597e93e5e | |||
5f003515a1 | |||
26f8647fea | |||
12f296d800 | |||
75ec632b61 | |||
d6519d4305 | |||
54cf7eaf92 | |||
d0b1e739b1 | |||
b04e2e8877 | |||
fb0d5124f2 | |||
6146a679c9 | |||
84660c44f0 | |||
c398cad059 | |||
35bf6b9790 | |||
e5a59e876e | |||
d464816c37 | |||
007651129a | |||
1968c9b702 | |||
eb54741226 | |||
ce86a518b9 | |||
09a5ea059f | |||
b3cc26bf35 | |||
5f29552be7 | |||
6afa55b7e4 | |||
37d717fe14 | |||
f193cf66d4 | |||
68efa935da | |||
1a0fed5d8e | |||
c3206bd2a0 | |||
26e7fef920 | |||
92e1c8744b | |||
cfe8832dd3 | |||
6a5b048658 | |||
ad0dbde653 | |||
f25c1b4950 | |||
469f752b80 | |||
55f2867db3 | |||
80429002d7 | |||
0910b76be3 | |||
1ccfd6842b | |||
0a0360c8cd | |||
be0201259a | |||
ef2a48329d | |||
81a0c384da | |||
70eaba3cb1 | |||
7e39e78259 | |||
c2122c39ae | |||
fb26ee8a7e | |||
001072721f | |||
65a1ec89ba | |||
ef9fbf258b | |||
a448949f25 | |||
e3232f987a | |||
7ebc3140bb | |||
c42ceef040 | |||
acc2e8afa9 | |||
04bb1bda32 | |||
eed93aaa07 | |||
fc0bb6cdee | |||
10f2ad1556 | |||
6d77b87b13 | |||
2101b46802 | |||
34f6765630 | |||
c58d1acba8 | |||
0ee79f304e | |||
e642de3d6f | |||
eca5a8b695 | |||
79c79f3c70 | |||
a9970d3cb9 | |||
b812f289f5 | |||
215ce0fb57 | |||
5154598845 | |||
1ee80d792c | |||
95284d2f1e | |||
7281f3eb56 | |||
607ef8f6c5 | |||
1ce640cc0b | |||
7bed18fdb1 | |||
c827b50d40 | |||
3c7e3c8e44 | |||
98e38ce4f3 | |||
132cf268c0 | |||
fd7edc9b05 | |||
ecf7c90840 | |||
d78a530af1 | |||
3ebe61db9f | |||
86c2f139c6 | |||
3596c348eb | |||
41a81474e4 | |||
aa2822d137 | |||
55b333d3e3 | |||
00cfad8578 | |||
1891c956e5 | |||
249c050757 | |||
a0081046b6 | |||
635f73b7f1 | |||
74fcd50e2f | |||
b04a2a7be7 | |||
083671e8ac | |||
78ea401e19 | |||
f3ca987bce | |||
2245add9f8 | |||
31004d7fac | |||
3d3f66ed41 | |||
c9c0195da5 | |||
70c0403858 | |||
8d4de82c7f | |||
22c51c2d51 | |||
158bd7c6a0 | |||
4a28d0b583 | |||
0501e6e693 | |||
8450ac09c1 | |||
1af00015e8 | |||
b44c3a3125 | |||
d729f1ca37 | |||
0fc9f00c14 | |||
6c9b339af7 | |||
b7a976af01 | |||
a689037917 | |||
313403c1f1 | |||
60409b8823 | |||
773dc2ec94 | |||
2a98c5d06b | |||
6d1b4ce3c6 | |||
0b2d961b70 | |||
d553b70470 | |||
6954f2cdd7 | |||
8cc832110a | |||
7b8c54b5a1 | |||
e850d175b5 | |||
326f79d59b | |||
ec4954ece2 | |||
b30e782c82 | |||
e34fe5d28e | |||
8581a062f1 | |||
b43971e5e9 | |||
855382170e |
@@ -263,7 +263,6 @@ ForEachMacros:
|
||||
- SET_SLOT_PROBING_BEGIN
|
||||
- MAP_SLOT_PROBING_BEGIN
|
||||
- VECTOR_SET_SLOT_PROBING_BEGIN
|
||||
- TGSET_ITER
|
||||
|
||||
StatementMacros:
|
||||
- PyObject_HEAD
|
||||
|
@@ -578,12 +578,6 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/7.0.0/lib/windows
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/6.0.0/lib/windows
|
||||
)
|
||||
find_library(
|
||||
COMPILER_ASAN_LIBRARY_THUNK NAMES clang_rt.asan_dll_thunk-x86_64
|
||||
PATHS
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/7.0.0/lib/windows
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/6.0.0/lib/windows
|
||||
)
|
||||
elseif(APPLE)
|
||||
execute_process(COMMAND ${CMAKE_CXX_COMPILER}
|
||||
-print-file-name=lib
|
||||
@@ -604,7 +598,6 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||
)
|
||||
endif()
|
||||
|
||||
mark_as_advanced(COMPILER_ASAN_LIBRARY_THUNK)
|
||||
mark_as_advanced(COMPILER_ASAN_LIBRARY)
|
||||
endif()
|
||||
endif()
|
||||
@@ -925,9 +918,9 @@ if(NOT CMAKE_BUILD_TYPE MATCHES "Release")
|
||||
unset(_list_COMPILER_ASAN_CFLAGS)
|
||||
unset(_is_CONFIG_DEBUG)
|
||||
elseif(COMPILER_ASAN_LIBRARY)
|
||||
set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS};\"${COMPILER_ASAN_LIBRARY}\" \"${COMPILER_ASAN_LIBRARY_THUNK}\"")
|
||||
set(PLATFORM_LINKFLAGS "\"${COMPILER_ASAN_LIBRARY}\" \"${COMPILER_ASAN_LIBRARY_THUNK}\" ${COMPILER_ASAN_LINKER_FLAGS}")
|
||||
set(PLATFORM_LINKFLAGS_DEBUG "\"${COMPILER_ASAN_LIBRARY}\" \"${COMPILER_ASAN_LIBRARY_THUNK}\" ${COMPILER_ASAN_LINKER_FLAGS}")
|
||||
set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS};${COMPILER_ASAN_LIBRARY}")
|
||||
set(PLATFORM_LINKFLAGS "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}")
|
||||
set(PLATFORM_LINKFLAGS_DEBUG "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
@@ -259,7 +259,7 @@ if(NOT DEFINED LIBDIR)
|
||||
else()
|
||||
message(FATAL_ERROR "32 bit compiler detected, blender no longer provides pre-build libraries for 32 bit windows, please set the LIBDIR cmake variable to your own library folder")
|
||||
endif()
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.30.30423)
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.29.30130)
|
||||
message(STATUS "Visual Studio 2022 detected.")
|
||||
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc15)
|
||||
elseif(MSVC_VERSION GREATER 1919)
|
||||
|
@@ -222,10 +222,6 @@ if __name__ == "__main__":
|
||||
|
||||
# Test if we are building a specific release version.
|
||||
branch = make_utils.git_branch(args.git_command)
|
||||
if branch == 'HEAD':
|
||||
sys.stderr.write('Blender git repository is in detached HEAD state, must be in a branch\n')
|
||||
sys.exit(1)
|
||||
|
||||
tag = make_utils.git_tag(args.git_command)
|
||||
release_version = make_utils.git_branch_release_version(branch, tag)
|
||||
|
||||
|
@@ -70,7 +70,7 @@ def git_branch_release_version(branch, tag):
|
||||
return release_version
|
||||
|
||||
|
||||
def svn_libraries_base_url(release_version, branch=None):
|
||||
def svn_libraries_base_url(release_version, branch):
|
||||
if release_version:
|
||||
svn_branch = "tags/blender-" + release_version + "-release"
|
||||
elif branch:
|
||||
|
@@ -10,4 +10,4 @@ requests==2.26.0
|
||||
|
||||
# Only needed to match the theme used for the official documentation.
|
||||
# Without this theme, the default theme will be used.
|
||||
sphinx_rtd_theme==1.0.0
|
||||
sphinx_rtd_theme==1.0.0rc1
|
||||
|
2
extern/Eigen3/Eigen/src/Core/util/Macros.h
vendored
2
extern/Eigen3/Eigen/src/Core/util/Macros.h
vendored
@@ -389,7 +389,7 @@
|
||||
|
||||
// Does the compiler support result_of?
|
||||
#ifndef EIGEN_HAS_STD_RESULT_OF
|
||||
#if __cplusplus < 201703L && EIGEN_MAX_CPP_VER>=11 && ((__has_feature(cxx_lambdas) || (defined(__cplusplus) && __cplusplus >= 201103L && __cplusplus)))
|
||||
#if EIGEN_MAX_CPP_VER>=11 && ((__has_feature(cxx_lambdas) || (defined(__cplusplus) && __cplusplus >= 201103L)))
|
||||
#define EIGEN_HAS_STD_RESULT_OF 1
|
||||
#else
|
||||
#define EIGEN_HAS_STD_RESULT_OF 0
|
||||
|
2
extern/audaspace/bindings/C/AUD_Device.cpp
vendored
2
extern/audaspace/bindings/C/AUD_Device.cpp
vendored
@@ -221,7 +221,7 @@ AUD_API void AUD_Device_setListenerVelocity(AUD_Device* device, const float valu
|
||||
AUD_API double AUD_Device_getRate(AUD_Device* device)
|
||||
{
|
||||
auto dev = device ? *device : DeviceManager::getDevice();
|
||||
return dev ? dev->getSpecs().rate : 0.0;
|
||||
return dev->getSpecs().rate;
|
||||
}
|
||||
|
||||
AUD_API float AUD_Device_getSpeedOfSound(AUD_Device* device)
|
||||
|
8
extern/audaspace/include/util/ThreadPool.h
vendored
8
extern/audaspace/include/util/ThreadPool.h
vendored
@@ -87,17 +87,11 @@ public:
|
||||
* \param args The arguments of the task.
|
||||
* \return A future of the same type as the return type of the task.
|
||||
*/
|
||||
#if __cplusplus > 201703L
|
||||
template<class T, class... Args>
|
||||
std::future<typename std::invoke_result<T, Args...>::type> enqueue(T&& t, Args&&... args)
|
||||
{
|
||||
using pkgdTask = std::packaged_task<typename std::invoke_result<T, Args...>::type()>;
|
||||
#else
|
||||
template<class T, class... Args>
|
||||
std::future<typename std::result_of<T(Args...)>::type> enqueue(T&& t, Args&&... args)
|
||||
{
|
||||
using pkgdTask = std::packaged_task<typename std::result_of<T(Args...)>::type()>;
|
||||
#endif
|
||||
|
||||
std::shared_ptr<pkgdTask> task = std::make_shared<pkgdTask>(std::bind(std::forward<T>(t), std::forward<Args>(args)...));
|
||||
auto result = task->get_future();
|
||||
|
||||
|
@@ -67,7 +67,7 @@ SET(LEMON_ENABLE_ILOG YES CACHE STRING "Enable ILOG (CPLEX) solver backend.")
|
||||
SET(LEMON_ENABLE_COIN YES CACHE STRING "Enable COIN solver backend.")
|
||||
SET(LEMON_ENABLE_SOPLEX YES CACHE STRING "Enable SoPlex solver backend.")
|
||||
|
||||
IF(LEMON_ENABLE_GLPK)
|
||||
IF(LEMON_ENABLE_GLPK)
|
||||
FIND_PACKAGE(GLPK 4.33)
|
||||
ENDIF(LEMON_ENABLE_GLPK)
|
||||
IF(LEMON_ENABLE_ILOG)
|
||||
|
@@ -4,7 +4,7 @@ FIND_PATH(ILOG_ROOT_DIR
|
||||
PATHS /opt/ibm/ILOG /usr/local/ibm/ILOG /usr/local/ILOG /usr/local/ilog
|
||||
PATHS "$ENV{HOME}/ILOG" "$ENV{HOME}/.local/ILOG"
|
||||
PATHS "$ENV{HOME}/ibm/ILOG" "$ENV{HOME}/.local/ibm/ILOG"
|
||||
PATHS "C:/Program Files/IBM/ILOG"
|
||||
PATHS "C:/Program Files/IBM/ILOG"
|
||||
PATH_SUFFIXES "CPLEX_Studio126" "CPLEX_Studio125"
|
||||
"CPLEX_Studio124" "CPLEX_Studio123" "CPLEX_Studio122"
|
||||
NO_DEFAULT_PATH
|
||||
|
@@ -16,4 +16,3 @@ LINK_DIRECTORIES(
|
||||
|
||||
# ADD_EXECUTABLE(myprog myprog-main.cc)
|
||||
# TARGET_LINK_LIBRARIES(myprog lemon)
|
||||
|
||||
|
@@ -88,4 +88,3 @@ INSTALL(
|
||||
FILES ${CMAKE_CURRENT_BINARY_DIR}/lemon.pc
|
||||
DESTINATION lib/pkgconfig
|
||||
)
|
||||
|
||||
|
3
extern/quadriflow/src/loader.cpp
vendored
3
extern/quadriflow/src/loader.cpp
vendored
@@ -10,7 +10,6 @@
|
||||
|
||||
#include <fstream>
|
||||
#include <unordered_map>
|
||||
#include <functional>
|
||||
|
||||
namespace qflow {
|
||||
|
||||
@@ -70,7 +69,7 @@ void load(const char* filename, MatrixXd& V, MatrixXi& F)
|
||||
};
|
||||
|
||||
/// Hash function for obj_vertex
|
||||
struct obj_vertexHash : std::function<size_t(obj_vertex)> {
|
||||
struct obj_vertexHash {
|
||||
std::size_t operator()(const obj_vertex &v) const {
|
||||
size_t hash = std::hash<uint32_t>()(v.p);
|
||||
hash = hash * 37 + std::hash<uint32_t>()(v.uv);
|
||||
|
BIN
icon_geom.blend
BIN
icon_geom.blend
Binary file not shown.
@@ -49,27 +49,27 @@
|
||||
/* Unsigned */
|
||||
ATOMIC_INLINE uint64_t atomic_add_and_fetch_uint64(uint64_t *p, uint64_t x)
|
||||
{
|
||||
return (uint64_t)(InterlockedExchangeAdd64((int64_t *)p, (int64_t)x) + (int64_t)x);
|
||||
return InterlockedExchangeAdd64((int64_t *)p, (int64_t)x) + x;
|
||||
}
|
||||
|
||||
ATOMIC_INLINE uint64_t atomic_sub_and_fetch_uint64(uint64_t *p, uint64_t x)
|
||||
{
|
||||
return (uint64_t)(InterlockedExchangeAdd64((int64_t *)p, -((int64_t)x)) - (int64_t)x);
|
||||
return InterlockedExchangeAdd64((int64_t *)p, -((int64_t)x)) - x;
|
||||
}
|
||||
|
||||
ATOMIC_INLINE uint64_t atomic_cas_uint64(uint64_t *v, uint64_t old, uint64_t _new)
|
||||
{
|
||||
return (uint64_t)(InterlockedCompareExchange64((int64_t *)v, _new, old));
|
||||
return InterlockedCompareExchange64((int64_t *)v, _new, old);
|
||||
}
|
||||
|
||||
ATOMIC_INLINE uint64_t atomic_fetch_and_add_uint64(uint64_t *p, uint64_t x)
|
||||
{
|
||||
return (uint64_t)InterlockedExchangeAdd64((int64_t *)p, (int64_t)x);
|
||||
return InterlockedExchangeAdd64((int64_t *)p, (int64_t)x);
|
||||
}
|
||||
|
||||
ATOMIC_INLINE uint64_t atomic_fetch_and_sub_uint64(uint64_t *p, uint64_t x)
|
||||
{
|
||||
return (uint64_t)InterlockedExchangeAdd64((int64_t *)p, -((int64_t)x));
|
||||
return InterlockedExchangeAdd64((int64_t *)p, -((int64_t)x));
|
||||
}
|
||||
|
||||
/* Signed */
|
||||
@@ -103,32 +103,32 @@ ATOMIC_INLINE int64_t atomic_fetch_and_sub_int64(int64_t *p, int64_t x)
|
||||
/* Unsigned */
|
||||
ATOMIC_INLINE uint32_t atomic_add_and_fetch_uint32(uint32_t *p, uint32_t x)
|
||||
{
|
||||
return (uint32_t)InterlockedExchangeAdd(p, x) + x;
|
||||
return InterlockedExchangeAdd(p, x) + x;
|
||||
}
|
||||
|
||||
ATOMIC_INLINE uint32_t atomic_sub_and_fetch_uint32(uint32_t *p, uint32_t x)
|
||||
{
|
||||
return (uint32_t)InterlockedExchangeAdd(p, -((int32_t)x)) - x;
|
||||
return InterlockedExchangeAdd(p, -((int32_t)x)) - x;
|
||||
}
|
||||
|
||||
ATOMIC_INLINE uint32_t atomic_cas_uint32(uint32_t *v, uint32_t old, uint32_t _new)
|
||||
{
|
||||
return (uint32_t)InterlockedCompareExchange((long *)v, _new, old);
|
||||
return InterlockedCompareExchange((long *)v, _new, old);
|
||||
}
|
||||
|
||||
ATOMIC_INLINE uint32_t atomic_fetch_and_add_uint32(uint32_t *p, uint32_t x)
|
||||
{
|
||||
return (uint32_t)InterlockedExchangeAdd(p, x);
|
||||
return InterlockedExchangeAdd(p, x);
|
||||
}
|
||||
|
||||
ATOMIC_INLINE uint32_t atomic_fetch_and_or_uint32(uint32_t *p, uint32_t x)
|
||||
{
|
||||
return (uint32_t)InterlockedOr((long *)p, x);
|
||||
return InterlockedOr((long *)p, x);
|
||||
}
|
||||
|
||||
ATOMIC_INLINE uint32_t atomic_fetch_and_and_uint32(uint32_t *p, uint32_t x)
|
||||
{
|
||||
return (uint32_t)InterlockedAnd((long *)p, x);
|
||||
return InterlockedAnd((long *)p, x);
|
||||
}
|
||||
|
||||
/* Signed */
|
||||
@@ -205,9 +205,9 @@ ATOMIC_INLINE uint8_t atomic_fetch_and_or_uint8(uint8_t *p, uint8_t b)
|
||||
ATOMIC_INLINE int8_t atomic_fetch_and_and_int8(int8_t *p, int8_t b)
|
||||
{
|
||||
#if (LG_SIZEOF_PTR == 8 || LG_SIZEOF_INT == 8)
|
||||
return (int8_t)InterlockedAnd8((char *)p, (char)b);
|
||||
return InterlockedAnd8((char *)p, (char)b);
|
||||
#else
|
||||
return (int8_t)_InterlockedAnd8((char *)p, (char)b);
|
||||
return _InterlockedAnd8((char *)p, (char)b);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -215,9 +215,9 @@ ATOMIC_INLINE int8_t atomic_fetch_and_and_int8(int8_t *p, int8_t b)
|
||||
ATOMIC_INLINE int8_t atomic_fetch_and_or_int8(int8_t *p, int8_t b)
|
||||
{
|
||||
#if (LG_SIZEOF_PTR == 8 || LG_SIZEOF_INT == 8)
|
||||
return (int8_t)InterlockedOr8((char *)p, (char)b);
|
||||
return InterlockedOr8((char *)p, (char)b);
|
||||
#else
|
||||
return (int8_t)_InterlockedOr8((char *)p, (char)b);
|
||||
return _InterlockedOr8((char *)p, (char)b);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -189,10 +189,8 @@ void BlenderSync::sync_geometry_motion(BL::Depsgraph &b_depsgraph,
|
||||
/* Ensure we only sync instanced geometry once. */
|
||||
Geometry *geom = object->get_geometry();
|
||||
|
||||
if (geometry_motion_synced.find(geom) != geometry_motion_synced.end() ||
|
||||
geometry_motion_attribute_synced.find(geom) != geometry_motion_attribute_synced.end()) {
|
||||
if (geometry_motion_synced.find(geom) != geometry_motion_synced.end())
|
||||
return;
|
||||
}
|
||||
|
||||
geometry_motion_synced.insert(geom);
|
||||
|
||||
|
@@ -347,57 +347,16 @@ static void fill_generic_attribute(BL::Mesh &b_mesh,
|
||||
}
|
||||
}
|
||||
|
||||
static void attr_create_motion(Mesh *mesh, BL::Attribute &b_attribute, const float motion_scale)
|
||||
{
|
||||
if (!(b_attribute.domain() == BL::Attribute::domain_POINT) &&
|
||||
(b_attribute.data_type() == BL::Attribute::data_type_FLOAT_VECTOR)) {
|
||||
return;
|
||||
}
|
||||
|
||||
BL::FloatVectorAttribute b_vector_attribute(b_attribute);
|
||||
const int numverts = mesh->get_verts().size();
|
||||
|
||||
/* Find or add attribute */
|
||||
float3 *P = &mesh->get_verts()[0];
|
||||
Attribute *attr_mP = mesh->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||
|
||||
if (!attr_mP) {
|
||||
attr_mP = mesh->attributes.add(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||
}
|
||||
|
||||
/* Only export previous and next frame, we don't have any in between data. */
|
||||
float motion_times[2] = {-1.0f, 1.0f};
|
||||
for (int step = 0; step < 2; step++) {
|
||||
const float relative_time = motion_times[step] * 0.5f * motion_scale;
|
||||
float3 *mP = attr_mP->data_float3() + step * numverts;
|
||||
|
||||
for (int i = 0; i < numverts; i++) {
|
||||
mP[i] = P[i] + get_float3(b_vector_attribute.data[i].vector()) * relative_time;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void attr_create_generic(Scene *scene,
|
||||
Mesh *mesh,
|
||||
BL::Mesh &b_mesh,
|
||||
const bool subdivision,
|
||||
const bool need_motion,
|
||||
const float motion_scale)
|
||||
static void attr_create_generic(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh, bool subdivision)
|
||||
{
|
||||
if (subdivision) {
|
||||
/* TODO: Handle subdivision correctly. */
|
||||
return;
|
||||
}
|
||||
AttributeSet &attributes = mesh->attributes;
|
||||
static const ustring u_velocity("velocity");
|
||||
|
||||
for (BL::Attribute &b_attribute : b_mesh.attributes) {
|
||||
const ustring name{b_attribute.name().c_str()};
|
||||
|
||||
if (need_motion && name == u_velocity) {
|
||||
attr_create_motion(mesh, b_attribute, motion_scale);
|
||||
}
|
||||
|
||||
if (!mesh->need_attribute(scene, name)) {
|
||||
continue;
|
||||
}
|
||||
@@ -900,10 +859,8 @@ static void create_mesh(Scene *scene,
|
||||
Mesh *mesh,
|
||||
BL::Mesh &b_mesh,
|
||||
const array<Node *> &used_shaders,
|
||||
const bool need_motion,
|
||||
const float motion_scale,
|
||||
const bool subdivision = false,
|
||||
const bool subdivide_uvs = true)
|
||||
bool subdivision = false,
|
||||
bool subdivide_uvs = true)
|
||||
{
|
||||
/* count vertices and faces */
|
||||
int numverts = b_mesh.vertices.length();
|
||||
@@ -1017,7 +974,7 @@ static void create_mesh(Scene *scene,
|
||||
attr_create_vertex_color(scene, mesh, b_mesh, subdivision);
|
||||
attr_create_sculpt_vertex_color(scene, mesh, b_mesh, subdivision);
|
||||
attr_create_random_per_island(scene, mesh, b_mesh, subdivision);
|
||||
attr_create_generic(scene, mesh, b_mesh, subdivision, need_motion, motion_scale);
|
||||
attr_create_generic(scene, mesh, b_mesh, subdivision);
|
||||
|
||||
if (subdivision) {
|
||||
attr_create_subd_uv_map(scene, mesh, b_mesh, subdivide_uvs);
|
||||
@@ -1045,8 +1002,6 @@ static void create_subd_mesh(Scene *scene,
|
||||
BObjectInfo &b_ob_info,
|
||||
BL::Mesh &b_mesh,
|
||||
const array<Node *> &used_shaders,
|
||||
const bool need_motion,
|
||||
const float motion_scale,
|
||||
float dicing_rate,
|
||||
int max_subdivisions)
|
||||
{
|
||||
@@ -1055,7 +1010,7 @@ static void create_subd_mesh(Scene *scene,
|
||||
BL::SubsurfModifier subsurf_mod(b_ob.modifiers[b_ob.modifiers.length() - 1]);
|
||||
bool subdivide_uvs = subsurf_mod.uv_smooth() != BL::SubsurfModifier::uv_smooth_NONE;
|
||||
|
||||
create_mesh(scene, mesh, b_mesh, used_shaders, need_motion, motion_scale, true, subdivide_uvs);
|
||||
create_mesh(scene, mesh, b_mesh, used_shaders, true, subdivide_uvs);
|
||||
|
||||
/* export creases */
|
||||
size_t num_creases = 0;
|
||||
@@ -1119,6 +1074,96 @@ static bool mesh_need_motion_attribute(BObjectInfo &b_ob_info, Scene *scene)
|
||||
return true;
|
||||
}
|
||||
|
||||
static void sync_mesh_cached_velocities(BObjectInfo &b_ob_info, Scene *scene, Mesh *mesh)
|
||||
{
|
||||
if (!mesh_need_motion_attribute(b_ob_info, scene)) {
|
||||
return;
|
||||
}
|
||||
|
||||
BL::Object b_ob = b_ob_info.real_object;
|
||||
BL::MeshSequenceCacheModifier b_mesh_cache = object_mesh_cache_find(b_ob, true, nullptr);
|
||||
|
||||
if (!b_mesh_cache) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!MeshSequenceCacheModifier_read_velocity_get(&b_mesh_cache.ptr)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const size_t numverts = mesh->get_verts().size();
|
||||
|
||||
if (b_mesh_cache.vertex_velocities.length() != numverts) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Find or add attribute */
|
||||
float3 *P = &mesh->get_verts()[0];
|
||||
Attribute *attr_mP = mesh->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||
|
||||
if (!attr_mP) {
|
||||
attr_mP = mesh->attributes.add(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||
}
|
||||
|
||||
/* Only export previous and next frame, we don't have any in between data. */
|
||||
float motion_times[2] = {-1.0f, 1.0f};
|
||||
for (int step = 0; step < 2; step++) {
|
||||
const float relative_time = motion_times[step] * scene->motion_shutter_time() * 0.5f;
|
||||
float3 *mP = attr_mP->data_float3() + step * numverts;
|
||||
|
||||
BL::MeshSequenceCacheModifier::vertex_velocities_iterator vvi;
|
||||
int i = 0;
|
||||
|
||||
for (b_mesh_cache.vertex_velocities.begin(vvi); vvi != b_mesh_cache.vertex_velocities.end();
|
||||
++vvi, ++i) {
|
||||
mP[i] = P[i] + get_float3(vvi->velocity()) * relative_time;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sync_mesh_fluid_motion(BObjectInfo &b_ob_info, Scene *scene, Mesh *mesh)
|
||||
{
|
||||
if (!b_ob_info.is_real_object_data()) {
|
||||
return;
|
||||
}
|
||||
if (!mesh_need_motion_attribute(b_ob_info, scene)) {
|
||||
return;
|
||||
}
|
||||
|
||||
BL::Object b_ob = b_ob_info.real_object;
|
||||
BL::FluidDomainSettings b_fluid_domain = object_fluid_liquid_domain_find(b_ob);
|
||||
|
||||
if (!b_fluid_domain)
|
||||
return;
|
||||
|
||||
/* If the mesh has modifiers following the fluid domain we can't export motion. */
|
||||
if (b_fluid_domain.mesh_vertices.length() != mesh->get_verts().size())
|
||||
return;
|
||||
|
||||
/* Find or add attribute */
|
||||
float3 *P = &mesh->get_verts()[0];
|
||||
Attribute *attr_mP = mesh->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||
|
||||
if (!attr_mP) {
|
||||
attr_mP = mesh->attributes.add(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||
}
|
||||
|
||||
/* Only export previous and next frame, we don't have any in between data. */
|
||||
float motion_times[2] = {-1.0f, 1.0f};
|
||||
for (int step = 0; step < 2; step++) {
|
||||
float relative_time = motion_times[step] * scene->motion_shutter_time() * 0.5f;
|
||||
float3 *mP = attr_mP->data_float3() + step * mesh->get_verts().size();
|
||||
|
||||
BL::FluidDomainSettings::mesh_vertices_iterator svi;
|
||||
int i = 0;
|
||||
|
||||
for (b_fluid_domain.mesh_vertices.begin(svi); svi != b_fluid_domain.mesh_vertices.end();
|
||||
++svi, ++i) {
|
||||
mP[i] = P[i] + get_float3(svi->velocity()) * relative_time;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph, BObjectInfo &b_ob_info, Mesh *mesh)
|
||||
{
|
||||
/* make a copy of the shaders as the caller in the main thread still need them for syncing the
|
||||
@@ -1142,13 +1187,6 @@ void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph, BObjectInfo &b_ob_info, M
|
||||
b_data, b_ob_info, b_depsgraph, need_undeformed, new_mesh.get_subdivision_type());
|
||||
|
||||
if (b_mesh) {
|
||||
/* Motion blur attribute is relative to seconds, we need it relative to frames. */
|
||||
const bool need_motion = mesh_need_motion_attribute(b_ob_info, scene);
|
||||
const float motion_scale = (need_motion) ?
|
||||
scene->motion_shutter_time() /
|
||||
(b_scene.render().fps() / b_scene.render().fps_base()) :
|
||||
0.0f;
|
||||
|
||||
/* Sync mesh itself. */
|
||||
if (new_mesh.get_subdivision_type() != Mesh::SUBDIVISION_NONE)
|
||||
create_subd_mesh(scene,
|
||||
@@ -1156,23 +1194,21 @@ void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph, BObjectInfo &b_ob_info, M
|
||||
b_ob_info,
|
||||
b_mesh,
|
||||
new_mesh.get_used_shaders(),
|
||||
need_motion,
|
||||
motion_scale,
|
||||
dicing_rate,
|
||||
max_subdivisions);
|
||||
else
|
||||
create_mesh(scene,
|
||||
&new_mesh,
|
||||
b_mesh,
|
||||
new_mesh.get_used_shaders(),
|
||||
need_motion,
|
||||
motion_scale,
|
||||
false);
|
||||
create_mesh(scene, &new_mesh, b_mesh, new_mesh.get_used_shaders(), false);
|
||||
|
||||
free_object_to_mesh(b_data, b_ob_info, b_mesh);
|
||||
}
|
||||
}
|
||||
|
||||
/* cached velocities (e.g. from alembic archive) */
|
||||
sync_mesh_cached_velocities(b_ob_info, scene, &new_mesh);
|
||||
|
||||
/* mesh fluid motion mantaflow */
|
||||
sync_mesh_fluid_motion(b_ob_info, scene, &new_mesh);
|
||||
|
||||
/* update original sockets */
|
||||
|
||||
mesh->clear_non_sockets();
|
||||
@@ -1206,6 +1242,19 @@ void BlenderSync::sync_mesh_motion(BL::Depsgraph b_depsgraph,
|
||||
Mesh *mesh,
|
||||
int motion_step)
|
||||
{
|
||||
/* Fluid motion blur already exported. */
|
||||
BL::FluidDomainSettings b_fluid_domain = object_fluid_liquid_domain_find(b_ob_info.real_object);
|
||||
if (b_fluid_domain) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Cached motion blur already exported. */
|
||||
BL::MeshSequenceCacheModifier mesh_cache = object_mesh_cache_find(
|
||||
b_ob_info.real_object, true, nullptr);
|
||||
if (mesh_cache) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Skip if no vertices were exported. */
|
||||
size_t numverts = mesh->get_verts().size();
|
||||
if (numverts == 0) {
|
||||
|
@@ -604,7 +604,7 @@ void BlenderSync::sync_objects(BL::Depsgraph &b_depsgraph,
|
||||
* only available in preview renders since currently do not have a good cache policy, the
|
||||
* data being loaded at once for all the frames. */
|
||||
if (experimental && b_v3d) {
|
||||
b_mesh_cache = object_mesh_cache_find(b_ob, &has_subdivision_modifier);
|
||||
b_mesh_cache = object_mesh_cache_find(b_ob, false, &has_subdivision_modifier);
|
||||
use_procedural = b_mesh_cache && b_mesh_cache.cache_file().use_render_procedural();
|
||||
}
|
||||
|
||||
@@ -719,14 +719,6 @@ void BlenderSync::sync_motion(BL::RenderSettings &b_render,
|
||||
}
|
||||
}
|
||||
|
||||
/* Check which geometry already has motion blur so it can be skipped. */
|
||||
geometry_motion_attribute_synced.clear();
|
||||
for (Geometry *geom : scene->geometry) {
|
||||
if (geom->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION)) {
|
||||
geometry_motion_attribute_synced.insert(geom);
|
||||
}
|
||||
}
|
||||
|
||||
/* note iteration over motion_times set happens in sorted order */
|
||||
foreach (float relative_time, motion_times) {
|
||||
/* center time is already handled. */
|
||||
@@ -757,8 +749,6 @@ void BlenderSync::sync_motion(BL::RenderSettings &b_render,
|
||||
sync_objects(b_depsgraph, b_v3d, relative_time);
|
||||
}
|
||||
|
||||
geometry_motion_attribute_synced.clear();
|
||||
|
||||
/* we need to set the python thread state again because this
|
||||
* function assumes it is being executed from python and will
|
||||
* try to save the thread state */
|
||||
|
@@ -236,7 +236,6 @@ class BlenderSync {
|
||||
id_map<ParticleSystemKey, ParticleSystem> particle_system_map;
|
||||
set<Geometry *> geometry_synced;
|
||||
set<Geometry *> geometry_motion_synced;
|
||||
set<Geometry *> geometry_motion_attribute_synced;
|
||||
set<float> motion_times;
|
||||
void *world_map;
|
||||
bool world_recalc;
|
||||
|
@@ -573,6 +573,22 @@ static inline bool object_use_deform_motion(BL::Object &b_parent, BL::Object &b_
|
||||
return use_deform_motion;
|
||||
}
|
||||
|
||||
static inline BL::FluidDomainSettings object_fluid_liquid_domain_find(BL::Object &b_ob)
|
||||
{
|
||||
for (BL::Modifier &b_mod : b_ob.modifiers) {
|
||||
if (b_mod.is_a(&RNA_FluidModifier)) {
|
||||
BL::FluidModifier b_mmd(b_mod);
|
||||
|
||||
if (b_mmd.fluid_type() == BL::FluidModifier::fluid_type_DOMAIN &&
|
||||
b_mmd.domain_settings().domain_type() == BL::FluidDomainSettings::domain_type_LIQUID) {
|
||||
return b_mmd.domain_settings();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return BL::FluidDomainSettings(PointerRNA_NULL);
|
||||
}
|
||||
|
||||
static inline BL::FluidDomainSettings object_fluid_gas_domain_find(BL::Object &b_ob)
|
||||
{
|
||||
for (BL::Modifier &b_mod : b_ob.modifiers) {
|
||||
@@ -590,6 +606,7 @@ static inline BL::FluidDomainSettings object_fluid_gas_domain_find(BL::Object &b
|
||||
}
|
||||
|
||||
static inline BL::MeshSequenceCacheModifier object_mesh_cache_find(BL::Object &b_ob,
|
||||
bool check_velocity,
|
||||
bool *has_subdivision_modifier)
|
||||
{
|
||||
for (int i = b_ob.modifiers.length() - 1; i >= 0; --i) {
|
||||
@@ -597,6 +614,13 @@ static inline BL::MeshSequenceCacheModifier object_mesh_cache_find(BL::Object &b
|
||||
|
||||
if (b_mod.type() == BL::Modifier::type_MESH_SEQUENCE_CACHE) {
|
||||
BL::MeshSequenceCacheModifier mesh_cache = BL::MeshSequenceCacheModifier(b_mod);
|
||||
|
||||
if (check_velocity) {
|
||||
if (!MeshSequenceCacheModifier_has_velocity_get(&mesh_cache.ptr)) {
|
||||
return BL::MeshSequenceCacheModifier(PointerRNA_NULL);
|
||||
}
|
||||
}
|
||||
|
||||
return mesh_cache;
|
||||
}
|
||||
|
||||
@@ -605,7 +629,9 @@ static inline BL::MeshSequenceCacheModifier object_mesh_cache_find(BL::Object &b
|
||||
continue;
|
||||
}
|
||||
|
||||
if (b_mod.type() == BL::Modifier::type_SUBSURF) {
|
||||
/* Only skip the subsurf modifier if we are not checking for the mesh sequence cache modifier
|
||||
* for motion blur. */
|
||||
if (b_mod.type() == BL::Modifier::type_SUBSURF && !check_velocity) {
|
||||
if (has_subdivision_modifier) {
|
||||
*has_subdivision_modifier = true;
|
||||
}
|
||||
|
@@ -89,10 +89,10 @@ class Hair : public Geometry {
|
||||
float4 r_keys[4]) const;
|
||||
};
|
||||
|
||||
NODE_SOCKET_API_ARRAY(array<float3>, curve_keys)
|
||||
NODE_SOCKET_API_ARRAY(array<float>, curve_radius)
|
||||
NODE_SOCKET_API_ARRAY(array<int>, curve_first_key)
|
||||
NODE_SOCKET_API_ARRAY(array<int>, curve_shader)
|
||||
NODE_SOCKET_API(array<float3>, curve_keys)
|
||||
NODE_SOCKET_API(array<float>, curve_radius)
|
||||
NODE_SOCKET_API(array<int>, curve_first_key)
|
||||
NODE_SOCKET_API(array<int>, curve_shader)
|
||||
|
||||
/* BVH */
|
||||
size_t curvekey_offset;
|
||||
|
@@ -413,7 +413,7 @@ void LightManager::device_update_distribution(Device *,
|
||||
/* point lights */
|
||||
bool use_lamp_mis = false;
|
||||
int light_index = 0;
|
||||
|
||||
|
||||
if (num_lights > 0) {
|
||||
float lightarea = (totarea > 0.0f) ? totarea / num_lights : 1.0f;
|
||||
foreach (Light *light, scene->lights) {
|
||||
|
@@ -128,7 +128,7 @@ class ImageTextureNode : public ImageSlotTextureNode {
|
||||
NODE_SOCKET_API(float, projection_blend)
|
||||
NODE_SOCKET_API(bool, animated)
|
||||
NODE_SOCKET_API(float3, vector)
|
||||
NODE_SOCKET_API_ARRAY(array<int>, tiles)
|
||||
NODE_SOCKET_API(array<int>, tiles)
|
||||
|
||||
protected:
|
||||
void cull_tiles(Scene *scene, ShaderGraph *graph);
|
||||
@@ -1554,7 +1554,7 @@ class CurvesNode : public ShaderNode {
|
||||
return NODE_GROUP_LEVEL_3;
|
||||
}
|
||||
|
||||
NODE_SOCKET_API_ARRAY(array<float3>, curves)
|
||||
NODE_SOCKET_API(array<float3>, curves)
|
||||
NODE_SOCKET_API(float, min_x)
|
||||
NODE_SOCKET_API(float, max_x)
|
||||
NODE_SOCKET_API(float, fac)
|
||||
@@ -1588,8 +1588,8 @@ class RGBRampNode : public ShaderNode {
|
||||
return NODE_GROUP_LEVEL_1;
|
||||
}
|
||||
|
||||
NODE_SOCKET_API_ARRAY(array<float3>, ramp)
|
||||
NODE_SOCKET_API_ARRAY(array<float>, ramp_alpha)
|
||||
NODE_SOCKET_API(array<float3>, ramp)
|
||||
NODE_SOCKET_API(array<float>, ramp_alpha)
|
||||
NODE_SOCKET_API(float, fac)
|
||||
NODE_SOCKET_API(bool, interpolate)
|
||||
};
|
||||
|
@@ -652,11 +652,6 @@ typedef struct {
|
||||
enum {
|
||||
GHOST_kXrContextDebug = (1 << 0),
|
||||
GHOST_kXrContextDebugTime = (1 << 1),
|
||||
# ifdef WIN32
|
||||
/* Needed to avoid issues with the SteamVR OpenGL graphics binding (use DirectX fallback
|
||||
instead). */
|
||||
GHOST_kXrContextGpuNVIDIA = (1 << 2),
|
||||
# endif
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
|
@@ -20,7 +20,6 @@
|
||||
* Abstraction for XR (VR, AR, MR, ..) access via OpenXR.
|
||||
*/
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
@@ -99,7 +98,7 @@ void GHOST_XrContext::initialize(const GHOST_XrContextCreateInfo *create_info)
|
||||
storeInstanceProperties();
|
||||
|
||||
/* Multiple bindings may be enabled. Now that we know the runtime in use, settle for one. */
|
||||
m_gpu_binding_type = determineGraphicsBindingTypeToUse(graphics_binding_types, create_info);
|
||||
m_gpu_binding_type = determineGraphicsBindingTypeToUse(graphics_binding_types);
|
||||
|
||||
printInstanceInfo();
|
||||
if (isDebugMode()) {
|
||||
@@ -136,8 +135,7 @@ void GHOST_XrContext::storeInstanceProperties()
|
||||
{"Monado(XRT) by Collabora et al", OPENXR_RUNTIME_MONADO},
|
||||
{"Oculus", OPENXR_RUNTIME_OCULUS},
|
||||
{"SteamVR/OpenXR", OPENXR_RUNTIME_STEAMVR},
|
||||
{"Windows Mixed Reality Runtime", OPENXR_RUNTIME_WMR},
|
||||
{"Varjo OpenXR Runtime", OPENXR_RUNTIME_VARJO}};
|
||||
{"Windows Mixed Reality Runtime", OPENXR_RUNTIME_WMR}};
|
||||
decltype(runtime_map)::const_iterator runtime_map_iter;
|
||||
|
||||
m_oxr->instance_properties.type = XR_TYPE_INSTANCE_PROPERTIES;
|
||||
@@ -417,12 +415,6 @@ void GHOST_XrContext::getExtensionsToEnable(
|
||||
try_ext.push_back(XR_HTC_VIVE_COSMOS_CONTROLLER_INTERACTION_EXTENSION_NAME);
|
||||
try_ext.push_back(XR_HUAWEI_CONTROLLER_INTERACTION_EXTENSION_NAME);
|
||||
|
||||
/* Varjo quad view extension. */
|
||||
try_ext.push_back(XR_VARJO_QUAD_VIEWS_EXTENSION_NAME);
|
||||
|
||||
/* Varjo foveated extension. */
|
||||
try_ext.push_back(XR_VARJO_FOVEATED_RENDERING_EXTENSION_NAME);
|
||||
|
||||
r_ext_names.reserve(try_ext.size() + graphics_binding_types.size());
|
||||
|
||||
/* Add graphics binding extensions (may be multiple ones, we'll settle for one to use later, once
|
||||
@@ -473,20 +465,16 @@ std::vector<GHOST_TXrGraphicsBinding> GHOST_XrContext::determineGraphicsBindingT
|
||||
}
|
||||
|
||||
GHOST_TXrGraphicsBinding GHOST_XrContext::determineGraphicsBindingTypeToUse(
|
||||
const std::vector<GHOST_TXrGraphicsBinding> &enabled_types,
|
||||
const GHOST_XrContextCreateInfo *create_info)
|
||||
const std::vector<GHOST_TXrGraphicsBinding> &enabled_types)
|
||||
{
|
||||
/* Return the first working type. */
|
||||
for (GHOST_TXrGraphicsBinding type : enabled_types) {
|
||||
#ifdef WIN32
|
||||
/* The SteamVR OpenGL backend currently fails for NVIDIA GPU's. Disable it and allow falling
|
||||
* back to the DirectX one. */
|
||||
if ((m_runtime_id == OPENXR_RUNTIME_STEAMVR) && (type == GHOST_kXrGraphicsOpenGL) &&
|
||||
((create_info->context_flag & GHOST_kXrContextGpuNVIDIA) != 0)) {
|
||||
/* The SteamVR OpenGL backend fails currently. Disable it and allow falling back to the DirectX
|
||||
* one. */
|
||||
if ((m_runtime_id == OPENXR_RUNTIME_STEAMVR) && (type == GHOST_kXrGraphicsOpenGL)) {
|
||||
continue;
|
||||
}
|
||||
#else
|
||||
((void)create_info);
|
||||
#endif
|
||||
|
||||
assert(type != GHOST_kXrGraphicsUnknown);
|
||||
@@ -625,11 +613,4 @@ bool GHOST_XrContext::isDebugTimeMode() const
|
||||
return m_debug_time;
|
||||
}
|
||||
|
||||
bool GHOST_XrContext::isExtensionEnabled(const char *ext) const
|
||||
{
|
||||
bool contains = std::find(m_enabled_extensions.begin(), m_enabled_extensions.end(), ext) !=
|
||||
m_enabled_extensions.end();
|
||||
return contains;
|
||||
}
|
||||
|
||||
/** \} */ /* Ghost Internal Accessors and Mutators */
|
||||
|
@@ -51,7 +51,6 @@ enum GHOST_TXrOpenXRRuntimeID {
|
||||
OPENXR_RUNTIME_OCULUS,
|
||||
OPENXR_RUNTIME_STEAMVR,
|
||||
OPENXR_RUNTIME_WMR, /* Windows Mixed Reality */
|
||||
OPENXR_RUNTIME_VARJO,
|
||||
|
||||
OPENXR_RUNTIME_UNKNOWN
|
||||
};
|
||||
@@ -95,8 +94,6 @@ class GHOST_XrContext : public GHOST_IXrContext {
|
||||
bool isDebugMode() const;
|
||||
bool isDebugTimeMode() const;
|
||||
|
||||
bool isExtensionEnabled(const char *ext) const;
|
||||
|
||||
private:
|
||||
static GHOST_XrErrorHandlerFn s_error_handler;
|
||||
static void *s_error_handler_customdata;
|
||||
@@ -139,6 +136,5 @@ class GHOST_XrContext : public GHOST_IXrContext {
|
||||
std::vector<GHOST_TXrGraphicsBinding> determineGraphicsBindingTypesToEnable(
|
||||
const GHOST_XrContextCreateInfo *create_info);
|
||||
GHOST_TXrGraphicsBinding determineGraphicsBindingTypeToUse(
|
||||
const std::vector<GHOST_TXrGraphicsBinding> &enabled_types,
|
||||
const GHOST_XrContextCreateInfo *create_info);
|
||||
const std::vector<GHOST_TXrGraphicsBinding> &enabled_types);
|
||||
};
|
||||
|
@@ -41,13 +41,10 @@ struct OpenXRSessionData {
|
||||
XrSession session = XR_NULL_HANDLE;
|
||||
XrSessionState session_state = XR_SESSION_STATE_UNKNOWN;
|
||||
|
||||
/* Use stereo rendering by default. */
|
||||
XrViewConfigurationType view_type = XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO;
|
||||
bool foveation_supported = false;
|
||||
|
||||
/* Only stereo rendering supported now. */
|
||||
const XrViewConfigurationType view_type = XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO;
|
||||
XrSpace reference_space;
|
||||
XrSpace view_space;
|
||||
XrSpace combined_eye_space;
|
||||
std::vector<XrView> views;
|
||||
std::vector<GHOST_XrSwapchain> swapchains;
|
||||
|
||||
@@ -61,9 +58,6 @@ struct GHOST_XrDrawInfo {
|
||||
std::chrono::high_resolution_clock::time_point frame_begin_time;
|
||||
/* Time previous frames took for rendering (in ms). */
|
||||
std::list<double> last_frame_times;
|
||||
|
||||
/* Whether foveation is active for the frame. */
|
||||
bool foveation_active;
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
@@ -88,9 +82,6 @@ GHOST_XrSession::~GHOST_XrSession()
|
||||
if (m_oxr->view_space != XR_NULL_HANDLE) {
|
||||
CHECK_XR_ASSERT(xrDestroySpace(m_oxr->view_space));
|
||||
}
|
||||
if (m_oxr->combined_eye_space != XR_NULL_HANDLE) {
|
||||
CHECK_XR_ASSERT(xrDestroySpace(m_oxr->combined_eye_space));
|
||||
}
|
||||
if (m_oxr->session != XR_NULL_HANDLE) {
|
||||
CHECK_XR_ASSERT(xrDestroySession(m_oxr->session));
|
||||
}
|
||||
@@ -198,13 +189,6 @@ static void create_reference_spaces(OpenXRSessionData &oxr, const GHOST_XrPose &
|
||||
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_VIEW;
|
||||
CHECK_XR(xrCreateReferenceSpace(oxr.session, &create_info, &oxr.view_space),
|
||||
"Failed to create view reference space.");
|
||||
|
||||
/* Foveation reference spaces. */
|
||||
if (oxr.foveation_supported) {
|
||||
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO;
|
||||
CHECK_XR(xrCreateReferenceSpace(oxr.session, &create_info, &oxr.combined_eye_space),
|
||||
"Failed to create combined eye reference space.");
|
||||
}
|
||||
}
|
||||
|
||||
void GHOST_XrSession::start(const GHOST_XrSessionBeginInfo *begin_info)
|
||||
@@ -308,19 +292,9 @@ GHOST_XrSession::LifeExpectancy GHOST_XrSession::handleStateChangeEvent(
|
||||
|
||||
void GHOST_XrSession::prepareDrawing()
|
||||
{
|
||||
assert(m_context->getInstance() != XR_NULL_HANDLE);
|
||||
|
||||
std::vector<XrViewConfigurationView> view_configs;
|
||||
uint32_t view_count;
|
||||
|
||||
/* Attempt to use quad view if supported. */
|
||||
if (m_context->isExtensionEnabled(XR_VARJO_QUAD_VIEWS_EXTENSION_NAME)) {
|
||||
m_oxr->view_type = XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO;
|
||||
}
|
||||
|
||||
m_oxr->foveation_supported = m_context->isExtensionEnabled(
|
||||
XR_VARJO_FOVEATED_RENDERING_EXTENSION_NAME);
|
||||
|
||||
CHECK_XR(
|
||||
xrEnumerateViewConfigurationViews(
|
||||
m_context->getInstance(), m_oxr->system_id, m_oxr->view_type, 0, &view_count, nullptr),
|
||||
@@ -332,36 +306,7 @@ void GHOST_XrSession::prepareDrawing()
|
||||
view_configs.size(),
|
||||
&view_count,
|
||||
view_configs.data()),
|
||||
"Failed to get view configurations.");
|
||||
|
||||
/* If foveated rendering is used, query the foveated views. */
|
||||
if (m_oxr->foveation_supported) {
|
||||
std::vector<XrFoveatedViewConfigurationViewVARJO> request_foveated_config{
|
||||
view_count, {XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO, nullptr, XR_TRUE}};
|
||||
|
||||
auto foveated_views = std::vector<XrViewConfigurationView>(view_count,
|
||||
{XR_TYPE_VIEW_CONFIGURATION_VIEW});
|
||||
|
||||
for (uint32_t i = 0; i < view_count; i++) {
|
||||
foveated_views[i].next = &request_foveated_config[i];
|
||||
}
|
||||
CHECK_XR(xrEnumerateViewConfigurationViews(m_context->getInstance(),
|
||||
m_oxr->system_id,
|
||||
m_oxr->view_type,
|
||||
view_configs.size(),
|
||||
&view_count,
|
||||
foveated_views.data()),
|
||||
"Failed to get foveated view configurations.");
|
||||
|
||||
/* Ensure swapchains have correct size even when foveation is being used. */
|
||||
for (uint32_t i = 0; i < view_count; i++) {
|
||||
view_configs[i].recommendedImageRectWidth = std::max(
|
||||
view_configs[i].recommendedImageRectWidth, foveated_views[i].recommendedImageRectWidth);
|
||||
view_configs[i].recommendedImageRectHeight = std::max(
|
||||
view_configs[i].recommendedImageRectHeight,
|
||||
foveated_views[i].recommendedImageRectHeight);
|
||||
}
|
||||
}
|
||||
"Failed to get count of view configurations.");
|
||||
|
||||
for (const XrViewConfigurationView &view_config : view_configs) {
|
||||
m_oxr->swapchains.emplace_back(*m_gpu_binding, m_oxr->session, view_config);
|
||||
@@ -382,20 +327,6 @@ void GHOST_XrSession::beginFrameDrawing()
|
||||
CHECK_XR(xrWaitFrame(m_oxr->session, &wait_info, &frame_state),
|
||||
"Failed to synchronize frame rates between Blender and the device.");
|
||||
|
||||
/* Check if we have foveation available for the current frame. */
|
||||
m_draw_info->foveation_active = false;
|
||||
if (m_oxr->foveation_supported) {
|
||||
XrSpaceLocation render_gaze_location{XR_TYPE_SPACE_LOCATION};
|
||||
CHECK_XR(xrLocateSpace(m_oxr->combined_eye_space,
|
||||
m_oxr->view_space,
|
||||
frame_state.predictedDisplayTime,
|
||||
&render_gaze_location),
|
||||
"Failed to locate combined eye space.");
|
||||
|
||||
m_draw_info->foveation_active = (render_gaze_location.locationFlags &
|
||||
XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT) != 0;
|
||||
}
|
||||
|
||||
CHECK_XR(xrBeginFrame(m_oxr->session, &begin_info),
|
||||
"Failed to submit frame rendering start state.");
|
||||
|
||||
@@ -511,8 +442,6 @@ XrCompositionLayerProjection GHOST_XrSession::drawLayer(
|
||||
std::vector<XrCompositionLayerProjectionView> &r_proj_layer_views, void *draw_customdata)
|
||||
{
|
||||
XrViewLocateInfo viewloc_info = {XR_TYPE_VIEW_LOCATE_INFO};
|
||||
XrViewLocateFoveatedRenderingVARJO foveated_info{
|
||||
XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO, nullptr, true};
|
||||
XrViewState view_state = {XR_TYPE_VIEW_STATE};
|
||||
XrCompositionLayerProjection layer = {XR_TYPE_COMPOSITION_LAYER_PROJECTION};
|
||||
XrSpaceLocation view_location{XR_TYPE_SPACE_LOCATION};
|
||||
@@ -522,10 +451,6 @@ XrCompositionLayerProjection GHOST_XrSession::drawLayer(
|
||||
viewloc_info.displayTime = m_draw_info->frame_state.predictedDisplayTime;
|
||||
viewloc_info.space = m_oxr->reference_space;
|
||||
|
||||
if (m_draw_info->foveation_active) {
|
||||
viewloc_info.next = &foveated_info;
|
||||
}
|
||||
|
||||
CHECK_XR(xrLocateViews(m_oxr->session,
|
||||
&viewloc_info,
|
||||
&view_state,
|
||||
@@ -533,7 +458,6 @@ XrCompositionLayerProjection GHOST_XrSession::drawLayer(
|
||||
&view_count,
|
||||
m_oxr->views.data()),
|
||||
"Failed to query frame view and projection state.");
|
||||
|
||||
assert(m_oxr->swapchains.size() == view_count);
|
||||
|
||||
CHECK_XR(
|
||||
|
@@ -21,7 +21,6 @@
|
||||
set(INC
|
||||
.
|
||||
../atomic
|
||||
../../source/blender/blenlib
|
||||
)
|
||||
|
||||
set(INC_SYS
|
||||
|
@@ -409,7 +409,7 @@ static void print_memhead_backtrace(MemHead *memh)
|
||||
(void)memh; /* Ignored. */
|
||||
}
|
||||
# endif /* defined(__linux__) || defined(__APPLE__) */
|
||||
#endif /* DEBUG_BACKTRACE */
|
||||
#endif /* DEBUG_BACKTRACE */
|
||||
|
||||
static void make_memhead_header(MemHead *memh, size_t len, const char *str)
|
||||
{
|
||||
|
@@ -30,7 +30,6 @@
|
||||
|
||||
/* to ensure strict conversions */
|
||||
#include "../../source/blender/blenlib/BLI_strict_flags.h"
|
||||
#include "../../source/blender/blenlib/BLI_asan.h"
|
||||
|
||||
#include "atomic_ops.h"
|
||||
#include "mallocn_intern.h"
|
||||
@@ -60,9 +59,6 @@ enum {
|
||||
#define MEMHEAD_ALIGNED_FROM_PTR(ptr) (((MemHeadAligned *)ptr) - 1)
|
||||
#define MEMHEAD_IS_ALIGNED(memhead) ((memhead)->len & (size_t)MEMHEAD_ALIGN_FLAG)
|
||||
|
||||
#define MEM_POISON_MEMHEAD(vmemh) BLI_asan_poison(MEMHEAD_FROM_PTR(vmemh), sizeof(MemHead))
|
||||
#define MEM_UNPOISON_MEMHEAD(vmemh) BLI_asan_unpoison(MEMHEAD_FROM_PTR(vmemh), sizeof(MemHead))
|
||||
|
||||
/* Uncomment this to have proper peak counter. */
|
||||
#define USE_ATOMIC_MAX
|
||||
|
||||
@@ -97,13 +93,7 @@ print_error(const char *str, ...)
|
||||
size_t MEM_lockfree_allocN_len(const void *vmemh)
|
||||
{
|
||||
if (vmemh) {
|
||||
size_t ret;
|
||||
|
||||
MEM_UNPOISON_MEMHEAD(vmemh);
|
||||
ret = MEMHEAD_FROM_PTR(vmemh)->len & ~((size_t)(MEMHEAD_ALIGN_FLAG));
|
||||
MEM_POISON_MEMHEAD(vmemh);
|
||||
|
||||
return ret;
|
||||
return MEMHEAD_FROM_PTR(vmemh)->len & ~((size_t)(MEMHEAD_ALIGN_FLAG));
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -129,8 +119,6 @@ void MEM_lockfree_freeN(void *vmemh)
|
||||
atomic_sub_and_fetch_u(&totblock, 1);
|
||||
atomic_sub_and_fetch_z(&mem_in_use, len);
|
||||
|
||||
MEM_UNPOISON_MEMHEAD(vmemh);
|
||||
|
||||
if (UNLIKELY(malloc_debug_memset && len)) {
|
||||
memset(memh + 1, 255, len);
|
||||
}
|
||||
@@ -149,9 +137,6 @@ void *MEM_lockfree_dupallocN(const void *vmemh)
|
||||
if (vmemh) {
|
||||
MemHead *memh = MEMHEAD_FROM_PTR(vmemh);
|
||||
const size_t prev_size = MEM_lockfree_allocN_len(vmemh);
|
||||
|
||||
MEM_UNPOISON_MEMHEAD(vmemh);
|
||||
|
||||
if (UNLIKELY(MEMHEAD_IS_ALIGNED(memh))) {
|
||||
MemHeadAligned *memh_aligned = MEMHEAD_ALIGNED_FROM_PTR(vmemh);
|
||||
newp = MEM_lockfree_mallocN_aligned(
|
||||
@@ -160,8 +145,6 @@ void *MEM_lockfree_dupallocN(const void *vmemh)
|
||||
else {
|
||||
newp = MEM_lockfree_mallocN(prev_size, "dupli_malloc");
|
||||
}
|
||||
|
||||
MEM_POISON_MEMHEAD(vmemh);
|
||||
memcpy(newp, vmemh, prev_size);
|
||||
}
|
||||
return newp;
|
||||
@@ -175,8 +158,6 @@ void *MEM_lockfree_reallocN_id(void *vmemh, size_t len, const char *str)
|
||||
MemHead *memh = MEMHEAD_FROM_PTR(vmemh);
|
||||
size_t old_len = MEM_lockfree_allocN_len(vmemh);
|
||||
|
||||
MEM_UNPOISON_MEMHEAD(vmemh);
|
||||
|
||||
if (LIKELY(!MEMHEAD_IS_ALIGNED(memh))) {
|
||||
newp = MEM_lockfree_mallocN(len, "realloc");
|
||||
}
|
||||
@@ -185,8 +166,6 @@ void *MEM_lockfree_reallocN_id(void *vmemh, size_t len, const char *str)
|
||||
newp = MEM_lockfree_mallocN_aligned(len, (size_t)memh_aligned->alignment, "realloc");
|
||||
}
|
||||
|
||||
MEM_POISON_MEMHEAD(vmemh);
|
||||
|
||||
if (newp) {
|
||||
if (len < old_len) {
|
||||
/* shrink */
|
||||
@@ -215,8 +194,6 @@ void *MEM_lockfree_recallocN_id(void *vmemh, size_t len, const char *str)
|
||||
MemHead *memh = MEMHEAD_FROM_PTR(vmemh);
|
||||
size_t old_len = MEM_lockfree_allocN_len(vmemh);
|
||||
|
||||
MEM_UNPOISON_MEMHEAD(vmemh);
|
||||
|
||||
if (LIKELY(!MEMHEAD_IS_ALIGNED(memh))) {
|
||||
newp = MEM_lockfree_mallocN(len, "recalloc");
|
||||
}
|
||||
@@ -224,7 +201,6 @@ void *MEM_lockfree_recallocN_id(void *vmemh, size_t len, const char *str)
|
||||
MemHeadAligned *memh_aligned = MEMHEAD_ALIGNED_FROM_PTR(vmemh);
|
||||
newp = MEM_lockfree_mallocN_aligned(len, (size_t)memh_aligned->alignment, "recalloc");
|
||||
}
|
||||
MEM_POISON_MEMHEAD(vmemh);
|
||||
|
||||
if (newp) {
|
||||
if (len < old_len) {
|
||||
@@ -265,7 +241,6 @@ void *MEM_lockfree_callocN(size_t len, const char *str)
|
||||
atomic_add_and_fetch_z(&mem_in_use, len);
|
||||
update_maximum(&peak_mem, mem_in_use);
|
||||
|
||||
MEM_POISON_MEMHEAD(PTR_FROM_MEMHEAD(memh));
|
||||
return PTR_FROM_MEMHEAD(memh);
|
||||
}
|
||||
print_error("Calloc returns null: len=" SIZET_FORMAT " in %s, total %u\n",
|
||||
@@ -311,8 +286,6 @@ void *MEM_lockfree_mallocN(size_t len, const char *str)
|
||||
atomic_add_and_fetch_z(&mem_in_use, len);
|
||||
update_maximum(&peak_mem, mem_in_use);
|
||||
|
||||
MEM_POISON_MEMHEAD(PTR_FROM_MEMHEAD(memh));
|
||||
|
||||
return PTR_FROM_MEMHEAD(memh);
|
||||
}
|
||||
print_error("Malloc returns null: len=" SIZET_FORMAT " in %s, total %u\n",
|
||||
@@ -384,8 +357,6 @@ void *MEM_lockfree_mallocN_aligned(size_t len, size_t alignment, const char *str
|
||||
atomic_add_and_fetch_z(&mem_in_use, len);
|
||||
update_maximum(&peak_mem, mem_in_use);
|
||||
|
||||
MEM_POISON_MEMHEAD(PTR_FROM_MEMHEAD(memh));
|
||||
|
||||
return PTR_FROM_MEMHEAD(memh);
|
||||
}
|
||||
print_error("Malloc returns null: len=" SIZET_FORMAT " in %s, total %u\n",
|
||||
|
@@ -70,9 +70,9 @@ static int check_if_canceled(float progress,
|
||||
return cancel;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void QFLOW_quadriflow_remesh(QuadriflowRemeshData *qrd,
|
||||
void (*update_cb)(void *, float progress, int *cancel),
|
||||
void *update_cb_data)
|
||||
void QFLOW_quadriflow_remesh(QuadriflowRemeshData *qrd,
|
||||
void (*update_cb)(void *, float progress, int *cancel),
|
||||
void *update_cb_data)
|
||||
{
|
||||
Parametrizer field;
|
||||
VertexMap vertexMap;
|
||||
@@ -80,12 +80,6 @@ ATTR_NO_OPT void QFLOW_quadriflow_remesh(QuadriflowRemeshData *qrd,
|
||||
/* Get remeshing parameters. */
|
||||
int faces = qrd->target_faces;
|
||||
|
||||
field.flag_adaptive_scale = 1;
|
||||
field.flag_minimum_cost_flow = 1;
|
||||
field.flag_preserve_boundary = 1;
|
||||
field.flag_preserve_sharp = 1;
|
||||
// field.flag_aggresive_sat = 1;
|
||||
|
||||
if (qrd->preserve_sharp) {
|
||||
field.flag_preserve_sharp = 1;
|
||||
}
|
||||
@@ -112,7 +106,6 @@ ATTR_NO_OPT void QFLOW_quadriflow_remesh(QuadriflowRemeshData *qrd,
|
||||
/* Copy mesh to quadriflow data structures. */
|
||||
std::vector<Vector3d> positions;
|
||||
std::vector<uint32_t> indices;
|
||||
std::vector<uint32_t> eflags;
|
||||
std::vector<ObjVertex> vertices;
|
||||
|
||||
for (int i = 0; i < qrd->totverts; i++) {
|
||||
@@ -121,18 +114,16 @@ ATTR_NO_OPT void QFLOW_quadriflow_remesh(QuadriflowRemeshData *qrd,
|
||||
}
|
||||
|
||||
for (int q = 0; q < qrd->totfaces; q++) {
|
||||
Vector3i f(qrd->faces[q].v[0], qrd->faces[q].v[1], qrd->faces[q].v[2]);
|
||||
Vector3i f(qrd->faces[q * 3], qrd->faces[q * 3 + 1], qrd->faces[q * 3 + 2]);
|
||||
|
||||
ObjVertex tri[6];
|
||||
const int nVertices = 3;
|
||||
int nVertices = 3;
|
||||
|
||||
tri[0] = ObjVertex(f[0]);
|
||||
tri[1] = ObjVertex(f[1]);
|
||||
tri[2] = ObjVertex(f[2]);
|
||||
|
||||
for (int i = 0; i < nVertices; ++i) {
|
||||
eflags.push_back(qrd->faces[q].eflag[i]);
|
||||
|
||||
const ObjVertex &v = tri[i];
|
||||
VertexMap::const_iterator it = vertexMap.find(v);
|
||||
if (it == vertexMap.end()) {
|
||||
@@ -147,10 +138,7 @@ ATTR_NO_OPT void QFLOW_quadriflow_remesh(QuadriflowRemeshData *qrd,
|
||||
}
|
||||
|
||||
field.F.resize(3, indices.size() / 3);
|
||||
// field.FF.resize(3, indices.size() / 3);
|
||||
|
||||
memcpy(field.F.data(), indices.data(), sizeof(uint32_t) * indices.size());
|
||||
// memcpy(field.FF.data(), eflags.data(), sizeof(uint32_t) * eflags.size());
|
||||
|
||||
field.V.resize(3, vertices.size());
|
||||
for (uint32_t i = 0; i < vertices.size(); ++i) {
|
||||
@@ -169,17 +157,12 @@ ATTR_NO_OPT void QFLOW_quadriflow_remesh(QuadriflowRemeshData *qrd,
|
||||
return;
|
||||
}
|
||||
|
||||
const int steps = 2;
|
||||
|
||||
/* Setup mesh boundary constraints if needed */
|
||||
#if 0
|
||||
if (true) { // field.flag_preserve_boundary) {
|
||||
if (field.flag_preserve_boundary) {
|
||||
Hierarchy &mRes = field.hierarchy;
|
||||
mRes.clearConstraints();
|
||||
|
||||
for (uint32_t i = 0; i < 3 * mRes.mF.cols(); ++i) {
|
||||
if (mRes.mFF((i) % 3, i / 3) & QFLOW_CONSTRAINED) {
|
||||
// if (mRes.mE2E[i] == -1) {
|
||||
if (mRes.mE2E[i] == -1) {
|
||||
uint32_t i0 = mRes.mF(i % 3, i / 3);
|
||||
uint32_t i1 = mRes.mF((i + 1) % 3, i / 3);
|
||||
Vector3d p0 = mRes.mV[0].col(i0), p1 = mRes.mV[0].col(i1);
|
||||
@@ -189,20 +172,15 @@ ATTR_NO_OPT void QFLOW_quadriflow_remesh(QuadriflowRemeshData *qrd,
|
||||
mRes.mCO[0].col(i0) = p0;
|
||||
mRes.mCO[0].col(i1) = p1;
|
||||
mRes.mCQ[0].col(i0) = mRes.mCQ[0].col(i1) = edge;
|
||||
mRes.mCQw[0][i0] = mRes.mCQw[0][i1] = mRes.mCOw[0][i0] = mRes.mCOw[0][i1] = 0.1;
|
||||
mRes.mCQw[0][i0] = mRes.mCQw[0][i1] = mRes.mCOw[0][i0] = mRes.mCOw[0][i1] = 1.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int j = 0; j < 10; j++) {
|
||||
mRes.propagateConstraints();
|
||||
}
|
||||
mRes.propagateConstraints();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Optimize the mesh field orientations (tangental field etc) */
|
||||
for (int i = 0; i < steps; i++) {
|
||||
Optimizer::optimize_orientations(field.hierarchy);
|
||||
}
|
||||
Optimizer::optimize_orientations(field.hierarchy);
|
||||
field.ComputeOrientationSingularities();
|
||||
|
||||
if (check_if_canceled(0.3f, update_cb, update_cb_data)) {
|
||||
@@ -217,13 +195,11 @@ ATTR_NO_OPT void QFLOW_quadriflow_remesh(QuadriflowRemeshData *qrd,
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < steps; i++) {
|
||||
Optimizer::optimize_scale(field.hierarchy, field.rho, field.flag_adaptive_scale);
|
||||
}
|
||||
Optimizer::optimize_scale(field.hierarchy, field.rho, field.flag_adaptive_scale);
|
||||
field.flag_adaptive_scale = 1;
|
||||
|
||||
Optimizer::optimize_positions(field.hierarchy, field.flag_adaptive_scale);
|
||||
|
||||
for (int i = 0; i < steps; i++) {
|
||||
Optimizer::optimize_positions(field.hierarchy, field.flag_adaptive_scale);
|
||||
}
|
||||
field.ComputePositionSingularities();
|
||||
|
||||
if (check_if_canceled(0.5f, update_cb, update_cb_data)) {
|
||||
|
@@ -23,16 +23,9 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
enum { QFLOW_CONSTRAINED = 1 };
|
||||
|
||||
typedef struct QuadriflowFace {
|
||||
int v[3];
|
||||
char eflag[3];
|
||||
} QuadriflowFace;
|
||||
|
||||
typedef struct QuadriflowRemeshData {
|
||||
float *verts;
|
||||
QuadriflowFace *faces;
|
||||
int *faces;
|
||||
int totfaces;
|
||||
int totverts;
|
||||
|
||||
|
Binary file not shown.
BIN
release/datafiles/icons/brush.sculpt.displacement_smear.dat
Normal file
BIN
release/datafiles/icons/brush.sculpt.displacement_smear.dat
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
release/datafiles/icons/ops.armature.extrude.cursor.dat
Normal file
BIN
release/datafiles/icons/ops.armature.extrude.cursor.dat
Normal file
Binary file not shown.
BIN
release/datafiles/icons/ops.armature.extrude.dat
Normal file
BIN
release/datafiles/icons/ops.armature.extrude.dat
Normal file
Binary file not shown.
BIN
release/datafiles/icons/ops.curve.dupli_extrude_cursor.dat
Normal file
BIN
release/datafiles/icons/ops.curve.dupli_extrude_cursor.dat
Normal file
Binary file not shown.
Submodule release/datafiles/locale updated: 94c39b5832...8a05b618f0
@@ -231,7 +231,7 @@ const UserDef U_default = {
|
||||
.collection_instance_empty_size = 1.0f,
|
||||
|
||||
.statusbar_flag = STATUSBAR_SHOW_VERSION,
|
||||
.file_preview_type = USER_FILE_PREVIEW_AUTO,
|
||||
.file_preview_type = USER_FILE_PREVIEW_CAMERA,
|
||||
|
||||
.runtime =
|
||||
{
|
||||
|
Submodule release/scripts/addons updated: e7f2213435...67f1fbca14
Submodule release/scripts/addons_contrib updated: 42da56aa73...ef6ef414d2
@@ -48,7 +48,6 @@ class SpellChecker:
|
||||
"equi", # equi-angular, etc.
|
||||
"fader",
|
||||
"globbing",
|
||||
"gridded",
|
||||
"haptics",
|
||||
"hasn", # hasn't
|
||||
"hetero",
|
||||
@@ -65,14 +64,12 @@ class SpellChecker:
|
||||
"mplayer",
|
||||
"ons", # add-ons
|
||||
"pong", # ping pong
|
||||
"resumable",
|
||||
"scalable",
|
||||
"shadeless",
|
||||
"shouldn", # shouldn't
|
||||
"smoothen",
|
||||
"spacings",
|
||||
"teleport", "teleporting",
|
||||
"tangency",
|
||||
"vertices",
|
||||
"wasn", # wasn't
|
||||
|
||||
@@ -176,13 +173,11 @@ class SpellChecker:
|
||||
"precalculate",
|
||||
"precomputing",
|
||||
"prefetch",
|
||||
"preload",
|
||||
"premultiply", "premultiplied",
|
||||
"prepass",
|
||||
"prepend",
|
||||
"preprocess", "preprocessing", "preprocessor", "preprocessed",
|
||||
"preprocess", "preprocessing", "preprocessor",
|
||||
"preseek",
|
||||
"preselect", "preselected",
|
||||
"promillage",
|
||||
"pushdown",
|
||||
"raytree",
|
||||
@@ -190,10 +185,8 @@ class SpellChecker:
|
||||
"realtime",
|
||||
"reinject", "reinjected",
|
||||
"rekey",
|
||||
"relink",
|
||||
"remesh",
|
||||
"reprojection", "reproject", "reprojecting",
|
||||
"resample",
|
||||
"resize",
|
||||
"restpose",
|
||||
"resync", "resynced",
|
||||
@@ -233,7 +226,6 @@ class SpellChecker:
|
||||
"todo",
|
||||
"tradeoff",
|
||||
"un",
|
||||
"unadjust", "unadjusted",
|
||||
"unassociate", "unassociated",
|
||||
"unbake",
|
||||
"uncheck",
|
||||
@@ -396,7 +388,6 @@ class SpellChecker:
|
||||
"boid", "boids",
|
||||
"ceil",
|
||||
"compressibility",
|
||||
"coplanar",
|
||||
"curvilinear",
|
||||
"equiangular",
|
||||
"equisolid",
|
||||
@@ -405,7 +396,6 @@ class SpellChecker:
|
||||
"gettext",
|
||||
"hashable",
|
||||
"hotspot",
|
||||
"hydrostatic",
|
||||
"interocular",
|
||||
"intrinsics",
|
||||
"irradiance",
|
||||
@@ -505,7 +495,6 @@ class SpellChecker:
|
||||
"perlin",
|
||||
"phong",
|
||||
"pinlight",
|
||||
"posterize",
|
||||
"qi",
|
||||
"radiosity",
|
||||
"raycast", "raycasting",
|
||||
|
@@ -63,11 +63,16 @@ def kmi_args_as_data(kmi):
|
||||
if kmi.any:
|
||||
s.append("\"any\": True")
|
||||
else:
|
||||
for attr in ("shift", "ctrl", "alt", "oskey"):
|
||||
if mod := getattr(kmi, attr):
|
||||
s.append(f"\"{attr:s}\": " + ("-1" if mod == -1 else "True"))
|
||||
if (mod := kmi.key_modifier) and (mod != 'NONE'):
|
||||
s.append(f"\"key_modifier\": '{mod:s}'")
|
||||
if kmi.shift:
|
||||
s.append("\"shift\": True")
|
||||
if kmi.ctrl:
|
||||
s.append("\"ctrl\": True")
|
||||
if kmi.alt:
|
||||
s.append("\"alt\": True")
|
||||
if kmi.oskey:
|
||||
s.append("\"oskey\": True")
|
||||
if kmi.key_modifier and kmi.key_modifier != 'NONE':
|
||||
s.append(f"\"key_modifier\": '{kmi.key_modifier}'")
|
||||
|
||||
if kmi.repeat:
|
||||
if (
|
||||
|
@@ -199,12 +199,10 @@ def draw_kmi(display_keymaps, kc, km, kmi, layout, level):
|
||||
subrow = sub.row()
|
||||
subrow.scale_x = 0.75
|
||||
subrow.prop(kmi, "any", toggle=True)
|
||||
# Use `*_ui` properties as integers aren't practical.
|
||||
subrow.prop(kmi, "shift_ui", toggle=True)
|
||||
subrow.prop(kmi, "ctrl_ui", toggle=True)
|
||||
subrow.prop(kmi, "alt_ui", toggle=True)
|
||||
subrow.prop(kmi, "oskey_ui", text="Cmd", toggle=True)
|
||||
|
||||
subrow.prop(kmi, "shift", toggle=True)
|
||||
subrow.prop(kmi, "ctrl", toggle=True)
|
||||
subrow.prop(kmi, "alt", toggle=True)
|
||||
subrow.prop(kmi, "oskey", text="Cmd", toggle=True)
|
||||
subrow.prop(kmi, "key_modifier", text="", event=True)
|
||||
|
||||
# Operator properties
|
||||
|
@@ -47,7 +47,6 @@ url_manual_mapping = (
|
||||
("bpy.types.fluiddomainsettings.sndparticle_potential_min_wavecrest*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-sndparticle-potential-min-wavecrest"),
|
||||
("bpy.types.movietrackingsettings.refine_intrinsics_principal_point*", "movie_clip/tracking/clip/toolbar/solve.html#bpy-types-movietrackingsettings-refine-intrinsics-principal-point"),
|
||||
("bpy.types.cyclesrenderlayersettings.denoising_optix_input_passes*", "render/layers/denoising.html#bpy-types-cyclesrenderlayersettings-denoising-optix-input-passes"),
|
||||
("bpy.types.sequencertoolsettings.use_snap_current_frame_to_strips*", "video_editing/sequencer/editing.html#bpy-types-sequencertoolsettings-use-snap-current-frame-to-strips"),
|
||||
("bpy.types.fluiddomainsettings.sndparticle_potential_max_energy*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-sndparticle-potential-max-energy"),
|
||||
("bpy.types.fluiddomainsettings.sndparticle_potential_min_energy*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-sndparticle-potential-min-energy"),
|
||||
("bpy.types.movietrackingsettings.refine_intrinsics_focal_length*", "movie_clip/tracking/clip/toolbar/solve.html#bpy-types-movietrackingsettings-refine-intrinsics-focal-length"),
|
||||
@@ -57,7 +56,6 @@ url_manual_mapping = (
|
||||
("bpy.types.fluiddomainsettings.sndparticle_sampling_wavecrest*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-sndparticle-sampling-wavecrest"),
|
||||
("bpy.types.rigidbodyconstraint.use_override_solver_iterations*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-use-override-solver-iterations"),
|
||||
("bpy.types.toolsettings.use_transform_correct_face_attributes*", "modeling/meshes/tools/tool_settings.html#bpy-types-toolsettings-use-transform-correct-face-attributes"),
|
||||
("bpy.types.rendersettings.use_sequencer_override_scene_strip*", "video_editing/preview/sidebar.html#bpy-types-rendersettings-use-sequencer-override-scene-strip"),
|
||||
("bpy.types.toolsettings.use_transform_correct_keep_connected*", "modeling/meshes/tools/tool_settings.html#bpy-types-toolsettings-use-transform-correct-keep-connected"),
|
||||
("bpy.types.fluiddomainsettings.sndparticle_potential_radius*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-sndparticle-potential-radius"),
|
||||
("bpy.types.fluiddomainsettings.openvdb_cache_compress_type*", "physics/fluid/type/domain/cache.html#bpy-types-fluiddomainsettings-openvdb-cache-compress-type"),
|
||||
@@ -67,8 +65,6 @@ url_manual_mapping = (
|
||||
("bpy.types.fluiddomainsettings.vector_scale_with_magnitude*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-vector-scale-with-magnitude"),
|
||||
("bpy.types.movietrackingstabilization.use_2d_stabilization*", "movie_clip/tracking/clip/sidebar/stabilization/panel.html#bpy-types-movietrackingstabilization-use-2d-stabilization"),
|
||||
("bpy.types.spacespreadsheet.display_context_path_collapsed*", "editors/spreadsheet.html#bpy-types-spacespreadsheet-display-context-path-collapsed"),
|
||||
("bpy.types.toolsettings.annotation_stroke_placement_view2d*", "interface/annotate_tool.html#bpy-types-toolsettings-annotation-stroke-placement-view2d"),
|
||||
("bpy.types.toolsettings.annotation_stroke_placement_view3d*", "interface/annotate_tool.html#bpy-types-toolsettings-annotation-stroke-placement-view3d"),
|
||||
("bpy.types.fluiddomainsettings.use_collision_border_front*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-use-collision-border-front"),
|
||||
("bpy.types.fluiddomainsettings.use_collision_border_right*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-use-collision-border-right"),
|
||||
("bpy.types.cyclesobjectsettings.use_adaptive_subdivision*", "render/cycles/object_settings/adaptive_subdiv.html#bpy-types-cyclesobjectsettings-use-adaptive-subdivision"),
|
||||
@@ -89,15 +85,11 @@ url_manual_mapping = (
|
||||
("bpy.types.fluiddomainsettings.sndparticle_bubble_drag*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-sndparticle-bubble-drag"),
|
||||
("bpy.types.linestylegeometrymodifier_backbonestretcher*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/backbone_stretcher.html#bpy-types-linestylegeometrymodifier-backbonestretcher"),
|
||||
("bpy.types.linestylegeometrymodifier_sinusdisplacement*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/sinus_displacement.html#bpy-types-linestylegeometrymodifier-sinusdisplacement"),
|
||||
("bpy.types.sequencertoolsettings.snap_to_current_frame*", "video_editing/sequencer/editing.html#bpy-types-sequencertoolsettings-snap-to-current-frame"),
|
||||
("bpy.types.colormanageddisplaysettings.display_device*", "render/color_management.html#bpy-types-colormanageddisplaysettings-display-device"),
|
||||
("bpy.types.colormanagedviewsettings.use_curve_mapping*", "render/color_management.html#bpy-types-colormanagedviewsettings-use-curve-mapping"),
|
||||
("bpy.types.fluiddomainsettings.color_ramp_field_scale*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-color-ramp-field-scale"),
|
||||
("bpy.types.fluiddomainsettings.use_adaptive_timesteps*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-use-adaptive-timesteps"),
|
||||
("bpy.types.fluiddomainsettings.use_dissolve_smoke_log*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-use-dissolve-smoke-log"),
|
||||
("bpy.types.gpencillayer.annotation_onion_before_color*", "interface/annotate_tool.html#bpy-types-gpencillayer-annotation-onion-before-color"),
|
||||
("bpy.types.gpencillayer.annotation_onion_before_range*", "interface/annotate_tool.html#bpy-types-gpencillayer-annotation-onion-before-range"),
|
||||
("bpy.types.gpencillayer.use_annotation_onion_skinning*", "interface/annotate_tool.html#bpy-types-gpencillayer-use-annotation-onion-skinning"),
|
||||
("bpy.types.greasepencil.use_adaptive_curve_resolution*", "grease_pencil/modes/edit/curve_editing.html#bpy-types-greasepencil-use-adaptive-curve-resolution"),
|
||||
("bpy.types.linestylegeometrymodifier_polygonalization*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/polygonization.html#bpy-types-linestylegeometrymodifier-polygonalization"),
|
||||
("bpy.types.toolsettings.use_gpencil_automerge_strokes*", "grease_pencil/modes/draw/introduction.html#bpy-types-toolsettings-use-gpencil-automerge-strokes"),
|
||||
@@ -110,13 +102,10 @@ url_manual_mapping = (
|
||||
("bpy.types.fluiddomainsettings.gridlines_lower_bound*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-gridlines-lower-bound"),
|
||||
("bpy.types.fluiddomainsettings.gridlines_range_color*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-gridlines-range-color"),
|
||||
("bpy.types.fluiddomainsettings.gridlines_upper_bound*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-gridlines-upper-bound"),
|
||||
("bpy.types.gpencillayer.annotation_onion_after_color*", "interface/annotate_tool.html#bpy-types-gpencillayer-annotation-onion-after-color"),
|
||||
("bpy.types.gpencillayer.annotation_onion_after_range*", "interface/annotate_tool.html#bpy-types-gpencillayer-annotation-onion-after-range"),
|
||||
("bpy.types.materialgpencilstyle.use_fill_texture_mix*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-use-fill-texture-mix"),
|
||||
("bpy.types.rendersettings_simplify_gpencil_shader_fx*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-simplify-gpencil-shader-fx"),
|
||||
("bpy.types.rendersettings_simplify_gpencil_view_fill*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-simplify-gpencil-view-fill"),
|
||||
("bpy.types.sequencertoolsettings.snap_to_hold_offset*", "video_editing/sequencer/editing.html#bpy-types-sequencertoolsettings-snap-to-hold-offset"),
|
||||
("bpy.types.spacesequenceeditor.waveform_display_type*", "editors/video_sequencer/sequencer/display.html#bpy-types-spacesequenceeditor-waveform-display-type"),
|
||||
("bpy.types.spacesequenceeditor.waveform_display_type*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-waveform-display-type"),
|
||||
("bpy.types.toolsettings.use_mesh_automerge_and_split*", "modeling/meshes/tools/tool_settings.html#bpy-types-toolsettings-use-mesh-automerge-and-split"),
|
||||
("bpy.types.brush.cloth_constraint_softbody_strength*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-cloth-constraint-softbody-strength"),
|
||||
("bpy.types.brush.elastic_deform_volume_preservation*", "sculpt_paint/sculpting/tools/elastic_deform.html#bpy-types-brush-elastic-deform-volume-preservation"),
|
||||
@@ -156,11 +145,9 @@ url_manual_mapping = (
|
||||
("bpy.types.materialgpencilstyle.use_stroke_holdout*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-use-stroke-holdout"),
|
||||
("bpy.types.movietrackingsettings.use_tripod_solver*", "movie_clip/tracking/clip/toolbar/solve.html#bpy-types-movietrackingsettings-use-tripod-solver"),
|
||||
("bpy.types.rendersettings.use_high_quality_normals*", "render/eevee/render_settings/performance.html#bpy-types-rendersettings-use-high-quality-normals"),
|
||||
("bpy.types.sequencertoolsettings.snap_ignore_muted*", "video_editing/sequencer/editing.html#bpy-types-sequencertoolsettings-snap-ignore-muted"),
|
||||
("bpy.types.sequencertoolsettings.snap_ignore_sound*", "video_editing/sequencer/editing.html#bpy-types-sequencertoolsettings-snap-ignore-sound"),
|
||||
("bpy.types.spaceoutliner.use_filter_case_sensitive*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-case-sensitive"),
|
||||
("bpy.types.spaceoutliner.use_filter_object_content*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-content"),
|
||||
("bpy.types.spacesequenceeditor.show_strip_duration*", "editors/video_sequencer/sequencer/display.html#bpy-types-spacesequenceeditor-show-strip-duration"),
|
||||
("bpy.types.spacesequenceeditor.show_strip_duration*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-duration"),
|
||||
("bpy.types.toolsettings.use_proportional_connected*", "editors/3dview/controls/proportional_editing.html#bpy-types-toolsettings-use-proportional-connected"),
|
||||
("bpy.types.toolsettings.use_proportional_projected*", "editors/3dview/controls/proportional_editing.html#bpy-types-toolsettings-use-proportional-projected"),
|
||||
("bpy.types.view3doverlay.vertex_paint_mode_opacity*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-vertex-paint-mode-opacity"),
|
||||
@@ -169,7 +156,6 @@ url_manual_mapping = (
|
||||
("bpy.ops.gpencil.vertex_color_brightness_contrast*", "grease_pencil/modes/vertex_paint/editing.html#bpy-ops-gpencil-vertex-color-brightness-contrast"),
|
||||
("bpy.ops.view3d.edit_mesh_extrude_individual_move*", "modeling/meshes/editing/face/extrude_faces.html#bpy-ops-view3d-edit-mesh-extrude-individual-move"),
|
||||
("bpy.ops.view3d.edit_mesh_extrude_manifold_normal*", "modeling/meshes/tools/extrude_manifold.html#bpy-ops-view3d-edit-mesh-extrude-manifold-normal"),
|
||||
("bpy.types.cyclesobjectsettings.use_distance_cull*", "render/cycles/object_settings/object_data.html#bpy-types-cyclesobjectsettings-use-distance-cull"),
|
||||
("bpy.types.cyclesrendersettings.ao_bounces_render*", "render/cycles/render_settings/light_paths.html#bpy-types-cyclesrendersettings-ao-bounces-render"),
|
||||
("bpy.types.cyclesrendersettings.use_distance_cull*", "render/cycles/render_settings/simplify.html#bpy-types-cyclesrendersettings-use-distance-cull"),
|
||||
("bpy.types.fluiddomainsettings.cache_frame_offset*", "physics/fluid/type/domain/cache.html#bpy-types-fluiddomainsettings-cache-frame-offset"),
|
||||
@@ -194,7 +180,6 @@ url_manual_mapping = (
|
||||
("bpy.types.spacedopesheeteditor.show_pose_markers*", "animation/markers.html#bpy-types-spacedopesheeteditor-show-pose-markers"),
|
||||
("bpy.types.spaceoutliner.use_filter_object_camera*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-camera"),
|
||||
("bpy.types.spaceoutliner.use_filter_object_others*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-others"),
|
||||
("bpy.types.spacesequenceeditor.show_strip_overlay*", "editors/video_sequencer/sequencer/display.html#bpy-types-spacesequenceeditor-show-strip-overlay"),
|
||||
("bpy.types.toolsettings.proportional_edit_falloff*", "editors/3dview/controls/proportional_editing.html#bpy-types-toolsettings-proportional-edit-falloff"),
|
||||
("bpy.types.toolsettings.use_edge_path_live_unwrap*", "modeling/meshes/tools/tool_settings.html#bpy-types-toolsettings-use-edge-path-live-unwrap"),
|
||||
("bpy.types.toolsettings.use_gpencil_draw_additive*", "grease_pencil/modes/draw/introduction.html#bpy-types-toolsettings-use-gpencil-draw-additive"),
|
||||
@@ -229,8 +214,8 @@ url_manual_mapping = (
|
||||
("bpy.types.spaceoutliner.use_filter_object_empty*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-empty"),
|
||||
("bpy.types.spaceoutliner.use_filter_object_light*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-light"),
|
||||
("bpy.types.spacesequenceeditor.proxy_render_size*", "video_editing/preview/sidebar.html#bpy-types-spacesequenceeditor-proxy-render-size"),
|
||||
("bpy.types.spacesequenceeditor.show_strip_offset*", "editors/video_sequencer/sequencer/display.html#bpy-types-spacesequenceeditor-show-strip-offset"),
|
||||
("bpy.types.spacesequenceeditor.show_strip_source*", "editors/video_sequencer/sequencer/display.html#bpy-types-spacesequenceeditor-show-strip-source"),
|
||||
("bpy.types.spacesequenceeditor.show_strip_offset*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-offset"),
|
||||
("bpy.types.spacesequenceeditor.show_strip_source*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-source"),
|
||||
("bpy.types.spacespreadsheetrowfilter.column_name*", "editors/spreadsheet.html#bpy-types-spacespreadsheetrowfilter-column-name"),
|
||||
("bpy.types.toolsettings.gpencil_stroke_placement*", "grease_pencil/modes/draw/stroke_placement.html#bpy-types-toolsettings-gpencil-stroke-placement"),
|
||||
("bpy.types.toolsettings.use_keyframe_cycle_aware*", "editors/timeline.html#bpy-types-toolsettings-use-keyframe-cycle-aware"),
|
||||
@@ -238,7 +223,6 @@ url_manual_mapping = (
|
||||
("bpy.types.viewlayer.use_pass_cryptomatte_object*", "render/layers/passes.html#bpy-types-viewlayer-use-pass-cryptomatte-object"),
|
||||
("bpy.ops.armature.rigify_apply_selection_colors*", "addons/rigging/rigify/metarigs.html#bpy-ops-armature-rigify-apply-selection-colors"),
|
||||
("bpy.types.brushgpencilsettings.fill_layer_mode*", "grease_pencil/modes/draw/tools/fill.html#bpy-types-brushgpencilsettings-fill-layer-mode"),
|
||||
("bpy.types.cyclesobjectsettings.use_camera_cull*", "render/cycles/object_settings/object_data.html#bpy-types-cyclesobjectsettings-use-camera-cull"),
|
||||
("bpy.types.cyclesrendersettings.use_camera_cull*", "render/cycles/render_settings/simplify.html#bpy-types-cyclesrendersettings-use-camera-cull"),
|
||||
("bpy.types.editbone.bbone_handle_use_ease_start*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-handle-use-ease-start"),
|
||||
("bpy.types.fluiddomainsettings.color_ramp_field*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-color-ramp-field"),
|
||||
@@ -248,7 +232,7 @@ url_manual_mapping = (
|
||||
("bpy.types.linestylegeometrymodifier_tipremover*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/tip_remover.html#bpy-types-linestylegeometrymodifier-tipremover"),
|
||||
("bpy.types.movieclipuser.use_render_undistorted*", "editors/clip/display/clip_display.html#bpy-types-movieclipuser-use-render-undistorted"),
|
||||
("bpy.types.movietrackingcamera.distortion_model*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-distortion-model"),
|
||||
("bpy.types.rendersettings.resolution_percentage*", "render/output/properties/format.html#bpy-types-rendersettings-resolution-percentage"),
|
||||
("bpy.types.rendersettings.resolution_percentage*", "render/output/properties/dimensions.html#bpy-types-rendersettings-resolution-percentage"),
|
||||
("bpy.types.rendersettings_simplify_gpencil_tint*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-simplify-gpencil-tint"),
|
||||
("bpy.types.spaceoutliner.use_filter_object_mesh*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-mesh"),
|
||||
("bpy.types.spaceoutliner.use_filter_view_layers*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-view-layers"),
|
||||
@@ -283,7 +267,6 @@ url_manual_mapping = (
|
||||
("bpy.types.linestylegeometrymodifier_blueprint*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/blueprint.html#bpy-types-linestylegeometrymodifier-blueprint"),
|
||||
("bpy.types.materialgpencilstyle.alignment_mode*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-alignment-mode"),
|
||||
("bpy.types.particlesettings.use_modifier_stack*", "physics/particles/emitter/emission.html#bpy-types-particlesettings-use-modifier-stack"),
|
||||
("bpy.types.rendersettings.sequencer_gl_preview*", "video_editing/preview/sidebar.html#bpy-types-rendersettings-sequencer-gl-preview"),
|
||||
("bpy.types.rendersettings.simplify_subdivision*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-simplify-subdivision"),
|
||||
("bpy.types.spacegrapheditor.show_extrapolation*", "editors/graph_editor/introduction.html#bpy-types-spacegrapheditor-show-extrapolation"),
|
||||
("bpy.types.spaceoutliner.use_filter_collection*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-collection"),
|
||||
@@ -291,7 +274,7 @@ url_manual_mapping = (
|
||||
("bpy.types.spacesequenceeditor.show_annotation*", "video_editing/preview/introduction.html#bpy-types-spacesequenceeditor-show-annotation"),
|
||||
("bpy.types.spacesequenceeditor.show_region_hud*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-region-hud"),
|
||||
("bpy.types.spacesequenceeditor.show_safe_areas*", "video_editing/preview/introduction.html#bpy-types-spacesequenceeditor-show-safe-areas"),
|
||||
("bpy.types.spacesequenceeditor.show_strip_name*", "editors/video_sequencer/sequencer/display.html#bpy-types-spacesequenceeditor-show-strip-name"),
|
||||
("bpy.types.spacesequenceeditor.show_strip_name*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-name"),
|
||||
("bpy.types.spacespreadsheet.show_only_selected*", "editors/spreadsheet.html#bpy-types-spacespreadsheet-show-only-selected"),
|
||||
("bpy.types.spacespreadsheetrowfilter.operation*", "editors/spreadsheet.html#bpy-types-spacespreadsheetrowfilter-operation"),
|
||||
("bpy.types.spacespreadsheetrowfilter.threshold*", "editors/spreadsheet.html#bpy-types-spacespreadsheetrowfilter-threshold"),
|
||||
@@ -330,7 +313,6 @@ url_manual_mapping = (
|
||||
("bpy.types.linestylegeometrymodifier_sampling*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/sampling.html#bpy-types-linestylegeometrymodifier-sampling"),
|
||||
("bpy.types.nodesocketinterface*.default_value*", "interface/controls/nodes/groups.html#bpy-types-nodesocketinterface-default-value"),
|
||||
("bpy.types.rendersettings.use_persistent_data*", "render/cycles/render_settings/performance.html#bpy-types-rendersettings-use-persistent-data"),
|
||||
("bpy.types.sequencertoolsettings.overlap_mode*", "video_editing/sequencer/editing.html#bpy-types-sequencertoolsettings-overlap-mode"),
|
||||
("bpy.types.spaceclipeditor.show_green_channel*", "editors/clip/display/clip_display.html#bpy-types-spaceclipeditor-show-green-channel"),
|
||||
("bpy.types.spaceoutliner.show_restrict_column*", "editors/outliner/interface.html#bpy-types-spaceoutliner-show-restrict-column"),
|
||||
("bpy.types.spacespreadsheet.object_eval_state*", "editors/spreadsheet.html#bpy-types-spacespreadsheet-object-eval-state"),
|
||||
@@ -357,10 +339,10 @@ url_manual_mapping = (
|
||||
("bpy.types.materialgpencilstyle.stroke_style*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-stroke-style"),
|
||||
("bpy.types.objectlineart.use_crease_override*", "scene_layout/object/properties/line_art.html#bpy-types-objectlineart-use-crease-override"),
|
||||
("bpy.types.rendersettings.preview_pixel_size*", "render/cycles/render_settings/performance.html#bpy-types-rendersettings-preview-pixel-size"),
|
||||
("bpy.types.rendersettings.use_crop_to_border*", "render/output/properties/format.html#bpy-types-rendersettings-use-crop-to-border"),
|
||||
("bpy.types.rendersettings.use_crop_to_border*", "render/output/properties/dimensions.html#bpy-types-rendersettings-use-crop-to-border"),
|
||||
("bpy.types.rendersettings.use_file_extension*", "render/output/properties/output.html#bpy-types-rendersettings-use-file-extension"),
|
||||
("bpy.types.sculpt.constant_detail_resolution*", "sculpt_paint/sculpting/tool_settings/dyntopo.html#bpy-types-sculpt-constant-detail-resolution"),
|
||||
("bpy.types.spaceclipeditor.annotation_source*", "movie_clip/tracking/clip/sidebar/view.html#bpy-types-spaceclipeditor-annotation-source"),
|
||||
("bpy.types.spaceclipeditor.annotation_source*", "movie_clip/tracking/clip/sidebar/annotation.html#bpy-types-spaceclipeditor-annotation-source"),
|
||||
("bpy.types.spaceclipeditor.show_blue_channel*", "editors/clip/display/clip_display.html#bpy-types-spaceclipeditor-show-blue-channel"),
|
||||
("bpy.types.spaceoutliner.use_filter_children*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-children"),
|
||||
("bpy.types.spaceoutliner.use_filter_complete*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-complete"),
|
||||
@@ -406,7 +388,7 @@ url_manual_mapping = (
|
||||
("bpy.types.spaceclipeditor.show_red_channel*", "editors/clip/display/clip_display.html#bpy-types-spaceclipeditor-show-red-channel"),
|
||||
("bpy.types.spaceclipeditor.use_mute_footage*", "editors/clip/display/clip_display.html#bpy-types-spaceclipeditor-use-mute-footage"),
|
||||
("bpy.types.spacesequenceeditor.overlay_type*", "video_editing/preview/sidebar.html#bpy-types-spacesequenceeditor-overlay-type"),
|
||||
("bpy.types.spacesequenceeditor.show_fcurves*", "editors/video_sequencer/sequencer/display.html#bpy-types-spacesequenceeditor-show-fcurves"),
|
||||
("bpy.types.spacesequenceeditor.show_fcurves*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-fcurves"),
|
||||
("bpy.types.spaceuveditor.sticky_select_mode*", "editors/uv/selecting.html#bpy-types-spaceuveditor-sticky-select-mode"),
|
||||
("bpy.types.spaceview3d.show_object_viewport*", "editors/3dview/display/visibility.html#bpy-types-spaceview3d-show-object-viewport"),
|
||||
("bpy.types.view3doverlay.show_fade_inactive*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-show-fade-inactive"),
|
||||
@@ -414,7 +396,6 @@ url_manual_mapping = (
|
||||
("bpy.ops.clip.stabilize_2d_rotation_select*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-stabilize-2d-rotation-select"),
|
||||
("bpy.ops.constraint.disable_keep_transform*", "animation/constraints/interface/common.html#bpy-ops-constraint-disable-keep-transform"),
|
||||
("bpy.ops.gpencil.stroke_reset_vertex_color*", "grease_pencil/modes/vertex_paint/editing.html#bpy-ops-gpencil-stroke-reset-vertex-color"),
|
||||
("bpy.ops.object.modifier_apply_as_shapekey*", "modeling/modifiers/introduction.html#bpy-ops-object-modifier-apply-as-shapekey"),
|
||||
("bpy.ops.object.vertex_group_normalize_all*", "sculpt_paint/weight_paint/editing.html#bpy-ops-object-vertex-group-normalize-all"),
|
||||
("bpy.ops.outliner.collection_color_tag_set*", "editors/outliner/editing.html#bpy-ops-outliner-collection-color-tag-set"),
|
||||
("bpy.ops.outliner.collection_enable_render*", "editors/outliner/editing.html#bpy-ops-outliner-collection-enable-render"),
|
||||
@@ -436,7 +417,6 @@ url_manual_mapping = (
|
||||
("bpy.types.fluidflowsettings.flow_behavior*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-flow-behavior"),
|
||||
("bpy.types.fluidflowsettings.noise_texture*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-noise-texture"),
|
||||
("bpy.types.geometrynodeattributevectormath*", "modeling/geometry_nodes/attribute/attribute_vector_math.html#bpy-types-geometrynodeattributevectormath"),
|
||||
("bpy.types.gpencillayer.annotation_opacity*", "interface/annotate_tool.html#bpy-types-gpencillayer-annotation-opacity"),
|
||||
("bpy.types.gpencillayer.use_onion_skinning*", "grease_pencil/properties/layers.html#bpy-types-gpencillayer-use-onion-skinning"),
|
||||
("bpy.types.gpencilsculptguide.use_snapping*", "grease_pencil/modes/draw/guides.html#bpy-types-gpencilsculptguide-use-snapping"),
|
||||
("bpy.types.gpencilsculptsettings.lock_axis*", "grease_pencil/modes/draw/drawing_planes.html#bpy-types-gpencilsculptsettings-lock-axis"),
|
||||
@@ -463,7 +443,6 @@ url_manual_mapping = (
|
||||
("bpy.types.toolsettings.gpencil_selectmode*", "grease_pencil/selecting.html#bpy-types-toolsettings-gpencil-selectmode"),
|
||||
("bpy.types.toolsettings.use_auto_normalize*", "sculpt_paint/weight_paint/tool_settings/options.html#bpy-types-toolsettings-use-auto-normalize"),
|
||||
("bpy.types.toolsettings.use_mesh_automerge*", "modeling/meshes/tools/tool_settings.html#bpy-types-toolsettings-use-mesh-automerge"),
|
||||
("bpy.types.toolsettings.use_snap_sequencer*", "video_editing/sequencer/editing.html#bpy-types-toolsettings-use-snap-sequencer"),
|
||||
("bpy.types.toolsettings.use_snap_translate*", "editors/3dview/controls/snapping.html#bpy-types-toolsettings-use-snap-translate"),
|
||||
("bpy.types.toolsettings.use_uv_select_sync*", "editors/uv/selecting.html#bpy-types-toolsettings-use-uv-select-sync"),
|
||||
("bpy.types.view3doverlay.wireframe_opacity*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-wireframe-opacity"),
|
||||
@@ -490,6 +469,7 @@ url_manual_mapping = (
|
||||
("bpy.types.fluiddomainsettings.flip_ratio*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-flip-ratio"),
|
||||
("bpy.types.fluiddomainsettings.guide_beta*", "physics/fluid/type/domain/guides.html#bpy-types-fluiddomainsettings-guide-beta"),
|
||||
("bpy.types.fluiddomainsettings.mesh_scale*", "physics/fluid/type/domain/liquid/mesh.html#bpy-types-fluiddomainsettings-mesh-scale"),
|
||||
("bpy.types.fluiddomainsettings.noise_type*", "physics/fluid/type/domain/gas/noise.html#bpy-types-fluiddomainsettings-noise-type"),
|
||||
("bpy.types.fluiddomainsettings.slice_axis*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-slice-axis"),
|
||||
("bpy.types.fluiddomainsettings.time_scale*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-time-scale"),
|
||||
("bpy.types.fluidflowsettings.texture_size*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-texture-size"),
|
||||
@@ -554,7 +534,7 @@ url_manual_mapping = (
|
||||
("bpy.types.fluidflowsettings.smoke_color*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-smoke-color"),
|
||||
("bpy.types.fluidflowsettings.temperature*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-temperature"),
|
||||
("bpy.types.fluidflowsettings.use_texture*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-use-texture"),
|
||||
("bpy.types.fmodifierenvelopecontrolpoint*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifierenvelopecontrolpoint"),
|
||||
("bpy.types.fmodifierenvelopecontrolpoint*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifierenvelopecontrolpoint"),
|
||||
("bpy.types.geometrynodeattributecurvemap*", "modeling/geometry_nodes/attribute/attribute_curve_map.html#bpy-types-geometrynodeattributecurvemap"),
|
||||
("bpy.types.geometrynodeattributemaprange*", "modeling/geometry_nodes/attribute/attribute_map_range.html#bpy-types-geometrynodeattributemaprange"),
|
||||
("bpy.types.geometrynodeattributetransfer*", "modeling/geometry_nodes/attribute/attribute_transfer.html#bpy-types-geometrynodeattributetransfer"),
|
||||
@@ -563,15 +543,13 @@ url_manual_mapping = (
|
||||
("bpy.types.material.use_sss_translucency*", "render/eevee/materials/settings.html#bpy-types-material-use-sss-translucency"),
|
||||
("bpy.types.movietrackingcamera.principal*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-principal"),
|
||||
("bpy.types.object.use_camera_lock_parent*", "scene_layout/object/properties/relations.html#bpy-types-object-use-camera-lock-parent"),
|
||||
("bpy.types.object.visible_volume_scatter*", "render/cycles/object_settings/object_data.html#bpy-types-object-visible-volume-scatter"),
|
||||
("bpy.types.rendersettings.pixel_aspect_x*", "render/output/properties/format.html#bpy-types-rendersettings-pixel-aspect-x"),
|
||||
("bpy.types.rendersettings.pixel_aspect_y*", "render/output/properties/format.html#bpy-types-rendersettings-pixel-aspect-y"),
|
||||
("bpy.types.rendersettings.pixel_aspect_x*", "render/output/properties/dimensions.html#bpy-types-rendersettings-pixel-aspect-x"),
|
||||
("bpy.types.rendersettings.pixel_aspect_y*", "render/output/properties/dimensions.html#bpy-types-rendersettings-pixel-aspect-y"),
|
||||
("bpy.types.rigidbodyconstraint.use_limit*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-use-limit"),
|
||||
("bpy.types.sceneeevee.taa_render_samples*", "render/eevee/render_settings/sampling.html#bpy-types-sceneeevee-taa-render-samples"),
|
||||
("bpy.types.spaceoutliner.use_sync_select*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-sync-select"),
|
||||
("bpy.types.spaceproperties.outliner_sync*", "editors/properties_editor.html#bpy-types-spaceproperties-outliner-sync"),
|
||||
("bpy.types.spaceproperties.search_filter*", "editors/properties_editor.html#bpy-types-spaceproperties-search-filter"),
|
||||
("bpy.types.spacesequenceeditor.view_type*", "editors/video_sequencer/introduction.html#bpy-types-spacesequenceeditor-view-type"),
|
||||
("bpy.types.spacetexteditor.margin_column*", "editors/text_editor.html#bpy-types-spacetexteditor-margin-column"),
|
||||
("bpy.types.spacetexteditor.use_find_wrap*", "editors/text_editor.html#bpy-types-spacetexteditor-use-find-wrap"),
|
||||
("bpy.types.spaceuveditor.pixel_snap_mode*", "modeling/meshes/uv/editing.html#bpy-types-spaceuveditor-pixel-snap-mode"),
|
||||
@@ -608,10 +586,9 @@ url_manual_mapping = (
|
||||
("bpy.types.material.preview_render_type*", "render/materials/preview.html#bpy-types-material-preview-render-type"),
|
||||
("bpy.types.materialgpencilstyle.pattern*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-pattern"),
|
||||
("bpy.types.materialgpencilstyle.texture*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-texture"),
|
||||
("bpy.types.modifier.use_apply_on_spline*", "modeling/modifiers/introduction.html#bpy-types-modifier-use-apply-on-spline"),
|
||||
("bpy.types.object.use_empty_image_alpha*", "modeling/empties.html#bpy-types-object-use-empty-image-alpha"),
|
||||
("bpy.types.rendersettings.frame_map_new*", "render/output/properties/frame_range.html#bpy-types-rendersettings-frame-map-new"),
|
||||
("bpy.types.rendersettings.frame_map_old*", "render/output/properties/frame_range.html#bpy-types-rendersettings-frame-map-old"),
|
||||
("bpy.types.rendersettings.frame_map_new*", "render/output/properties/dimensions.html#bpy-types-rendersettings-frame-map-new"),
|
||||
("bpy.types.rendersettings.frame_map_old*", "render/output/properties/dimensions.html#bpy-types-rendersettings-frame-map-old"),
|
||||
("bpy.types.rendersettings.use_overwrite*", "render/output/properties/output.html#bpy-types-rendersettings-use-overwrite"),
|
||||
("bpy.types.rendersettings.use_sequencer*", "render/output/properties/post_processing.html#bpy-types-rendersettings-use-sequencer"),
|
||||
("bpy.types.sceneeevee.volumetric_shadow*", "render/eevee/render_settings/volumetrics.html#bpy-types-sceneeevee-volumetric-shadow"),
|
||||
@@ -636,7 +613,6 @@ url_manual_mapping = (
|
||||
("bpy.ops.mesh.primitive_ico_sphere_add*", "modeling/meshes/primitives.html#bpy-ops-mesh-primitive-ico-sphere-add"),
|
||||
("bpy.ops.object.gpencil_modifier_apply*", "grease_pencil/modifiers/introduction.html#bpy-ops-object-gpencil-modifier-apply"),
|
||||
("bpy.ops.object.material_slot_deselect*", "render/materials/assignment.html#bpy-ops-object-material-slot-deselect"),
|
||||
("bpy.ops.object.modifier_move_to_index*", "modeling/modifiers/introduction.html#bpy-ops-object-modifier-move-to-index"),
|
||||
("bpy.ops.object.multires_external_save*", "modeling/modifiers/generate/multiresolution.html#bpy-ops-object-multires-external-save"),
|
||||
("bpy.ops.object.vertex_group_normalize*", "sculpt_paint/weight_paint/editing.html#bpy-ops-object-vertex-group-normalize"),
|
||||
("bpy.ops.object.visual_transform_apply*", "scene_layout/object/editing/apply.html#bpy-ops-object-visual-transform-apply"),
|
||||
@@ -669,12 +645,11 @@ url_manual_mapping = (
|
||||
("bpy.types.linestyle*modifier_material*", "render/freestyle/parameter_editor/line_style/modifiers/color/material.html#bpy-types-linestyle-modifier-material"),
|
||||
("bpy.types.movietrackingcamera.brown_k*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-brown-k"),
|
||||
("bpy.types.movietrackingcamera.brown_p*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-brown-p"),
|
||||
("bpy.types.object.visible_transmission*", "render/cycles/object_settings/object_data.html#bpy-types-object-visible-transmission"),
|
||||
("bpy.types.particlesettingstextureslot*", "physics/particles/texture_influence.html#bpy-types-particlesettingstextureslot"),
|
||||
("bpy.types.posebone.ik_rotation_weight*", "animation/armatures/posing/bone_constraints/inverse_kinematics/introduction.html#bpy-types-posebone-ik-rotation-weight"),
|
||||
("bpy.types.regionview3d.show_sync_view*", "editors/3dview/navigate/views.html#bpy-types-regionview3d-show-sync-view"),
|
||||
("bpy.types.rendersettings.resolution_x*", "render/output/properties/format.html#bpy-types-rendersettings-resolution-x"),
|
||||
("bpy.types.rendersettings.resolution_y*", "render/output/properties/format.html#bpy-types-rendersettings-resolution-y"),
|
||||
("bpy.types.rendersettings.resolution_x*", "render/output/properties/dimensions.html#bpy-types-rendersettings-resolution-x"),
|
||||
("bpy.types.rendersettings.resolution_y*", "render/output/properties/dimensions.html#bpy-types-rendersettings-resolution-y"),
|
||||
("bpy.types.rendersettings.threads_mode*", "render/cycles/render_settings/performance.html#bpy-types-rendersettings-threads-mode"),
|
||||
("bpy.types.rigidbodyconstraint.enabled*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-enabled"),
|
||||
("bpy.types.rigidbodyconstraint.object1*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-object1"),
|
||||
@@ -725,7 +700,7 @@ url_manual_mapping = (
|
||||
("bpy.types.compositornodekeyingscreen*", "compositing/types/matte/keying_screen.html#bpy-types-compositornodekeyingscreen"),
|
||||
("bpy.types.dynamicpaintcanvassettings*", "physics/dynamic_paint/canvas.html#bpy-types-dynamicpaintcanvassettings"),
|
||||
("bpy.types.fluidflowsettings.use_flow*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-use-flow"),
|
||||
("bpy.types.fmodifierfunctiongenerator*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifierfunctiongenerator"),
|
||||
("bpy.types.fmodifierfunctiongenerator*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifierfunctiongenerator"),
|
||||
("bpy.types.geometrynodeattributeclamp*", "modeling/geometry_nodes/attribute/attribute_clamp.html#bpy-types-geometrynodeattributeclamp"),
|
||||
("bpy.types.geometrynodecollectioninfo*", "modeling/geometry_nodes/input/collection_info.html#bpy-types-geometrynodecollectioninfo"),
|
||||
("bpy.types.geometrynodecurveendpoints*", "modeling/geometry_nodes/curve/curve_endpoints.html#bpy-types-geometrynodecurveendpoints"),
|
||||
@@ -735,7 +710,6 @@ url_manual_mapping = (
|
||||
("bpy.types.geometrynodepointstovolume*", "modeling/geometry_nodes/volume/points_to_volume.html#bpy-types-geometrynodepointstovolume"),
|
||||
("bpy.types.geometrynodepointtranslate*", "modeling/geometry_nodes/point/point_translate.html#bpy-types-geometrynodepointtranslate"),
|
||||
("bpy.types.greasepencil.use_multiedit*", "grease_pencil/multiframe.html#bpy-types-greasepencil-use-multiedit"),
|
||||
("bpy.types.keyframe.handle_right_type*", "editors/graph_editor/fcurves/properties.html#bpy-types-keyframe-handle-right-type"),
|
||||
("bpy.types.materialgpencilstyle.color*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-color"),
|
||||
("bpy.types.movietrackingcamera.nuke_k*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-nuke-k"),
|
||||
("bpy.types.movietrackingstabilization*", "movie_clip/tracking/clip/sidebar/stabilization/index.html#bpy-types-movietrackingstabilization"),
|
||||
@@ -754,7 +728,6 @@ url_manual_mapping = (
|
||||
("bpy.types.toolsettings.use_snap_self*", "editors/3dview/controls/snapping.html#bpy-types-toolsettings-use-snap-self"),
|
||||
("bpy.types.viewlayer.active_aov_index*", "render/layers/passes.html#bpy-types-viewlayer-active-aov-index"),
|
||||
("bpy.ops.anim.channels_enable_toggle*", "editors/graph_editor/channels.html#bpy-ops-anim-channels-enable-toggle"),
|
||||
("bpy.ops.constraint.copy_to_selected*", "animation/constraints/interface/header.html#bpy-ops-constraint-copy-to-selected"),
|
||||
("bpy.ops.gpencil.bake_mesh_animation*", "grease_pencil/animation/tools.html#bpy-ops-gpencil-bake-mesh-animation"),
|
||||
("bpy.ops.gpencil.select_vertex_color*", "grease_pencil/selecting.html#bpy-ops-gpencil-select-vertex-color"),
|
||||
("bpy.ops.gpencil.set_active_material*", "grease_pencil/modes/edit/stroke_menu.html#bpy-ops-gpencil-set-active-material"),
|
||||
@@ -805,15 +778,13 @@ url_manual_mapping = (
|
||||
("bpy.types.geometrynodepointinstance*", "modeling/geometry_nodes/point/point_instance.html#bpy-types-geometrynodepointinstance"),
|
||||
("bpy.types.geometrynodepointseparate*", "modeling/geometry_nodes/point/point_separate.html#bpy-types-geometrynodepointseparate"),
|
||||
("bpy.types.geometrynoderesamplecurve*", "modeling/geometry_nodes/curve/resample_curve.html#bpy-types-geometrynoderesamplecurve"),
|
||||
("bpy.types.keyframe.handle_left_type*", "editors/graph_editor/fcurves/properties.html#bpy-types-keyframe-handle-left-type"),
|
||||
("bpy.types.light.use_custom_distance*", "render/eevee/lighting.html#bpy-types-light-use-custom-distance"),
|
||||
("bpy.types.materialgpencilstyle.flip*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-flip"),
|
||||
("bpy.types.materialgpencilstyle.mode*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-mode"),
|
||||
("bpy.types.modifier.show_in_editmode*", "modeling/modifiers/introduction.html#bpy-types-modifier-show-in-editmode"),
|
||||
("bpy.types.object.empty_display_size*", "modeling/empties.html#bpy-types-object-empty-display-size"),
|
||||
("bpy.types.object.empty_display_type*", "modeling/empties.html#bpy-types-object-empty-display-type"),
|
||||
("bpy.types.regionview3d.use_box_clip*", "editors/3dview/navigate/views.html#bpy-types-regionview3d-use-box-clip"),
|
||||
("bpy.types.rendersettings.use_border*", "render/output/properties/format.html#bpy-types-rendersettings-use-border"),
|
||||
("bpy.types.rendersettings.use_border*", "render/output/properties/dimensions.html#bpy-types-rendersettings-use-border"),
|
||||
("bpy.types.rigidbodyconstraint.limit*", "physics/rigid_body/constraints/introduction.html#bpy-types-rigidbodyconstraint-limit"),
|
||||
("bpy.types.rigidbodyobject.kinematic*", "physics/rigid_body/properties/settings.html#bpy-types-rigidbodyobject-kinematic"),
|
||||
("bpy.types.scene.audio_doppler_speed*", "scene_layout/scene/properties.html#bpy-types-scene-audio-doppler-speed"),
|
||||
@@ -877,6 +848,7 @@ url_manual_mapping = (
|
||||
("bpy.types.copytransformsconstraint*", "animation/constraints/transform/copy_transforms.html#bpy-types-copytransformsconstraint"),
|
||||
("bpy.types.correctivesmoothmodifier*", "modeling/modifiers/deform/corrective_smooth.html#bpy-types-correctivesmoothmodifier"),
|
||||
("bpy.types.curve.bevel_factor_start*", "modeling/curves/properties/geometry.html#bpy-types-curve-bevel-factor-start"),
|
||||
("bpy.types.cyclesvisibilitysettings*", "render/cycles/object_settings/object_data.html#bpy-types-cyclesvisibilitysettings"),
|
||||
("bpy.types.fluiddomainsettings.beta*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-beta"),
|
||||
("bpy.types.fluidmodifier.fluid_type*", "physics/fluid/type/index.html#bpy-types-fluidmodifier-fluid-type"),
|
||||
("bpy.types.functionnodefloatcompare*", "modeling/geometry_nodes/utilities/float_compare.html#bpy-types-functionnodefloatcompare"),
|
||||
@@ -893,7 +865,6 @@ url_manual_mapping = (
|
||||
("bpy.types.mesh.use_mirror_topology*", "modeling/meshes/tools/tool_settings.html#bpy-types-mesh-use-mirror-topology"),
|
||||
("bpy.types.movieclip.display_aspect*", "editors/clip/display/clip_display.html#bpy-types-movieclip-display-aspect"),
|
||||
("bpy.types.nodesocketinterface.name*", "interface/controls/nodes/groups.html#bpy-types-nodesocketinterface-name"),
|
||||
("bpy.types.object.is_shadow_catcher*", "render/cycles/object_settings/object_data.html#bpy-types-object-is-shadow-catcher"),
|
||||
("bpy.types.particleinstancemodifier*", "modeling/modifiers/physics/particle_instance.html#bpy-types-particleinstancemodifier"),
|
||||
("bpy.types.sequencetransform.offset*", "video_editing/sequencer/sidebar/strip.html#bpy-types-sequencetransform-offset"),
|
||||
("bpy.types.shadernodebrightcontrast*", "render/shader_nodes/color/bright_contrast.html#bpy-types-shadernodebrightcontrast"),
|
||||
@@ -984,7 +955,7 @@ url_manual_mapping = (
|
||||
("bpy.types.limitrotationconstraint*", "animation/constraints/transform/limit_rotation.html#bpy-types-limitrotationconstraint"),
|
||||
("bpy.types.multiplygpencilmodifier*", "grease_pencil/modifiers/generate/multiple_strokes.html#bpy-types-multiplygpencilmodifier"),
|
||||
("bpy.types.rendersettings.filepath*", "render/output/properties/output.html#bpy-types-rendersettings-filepath"),
|
||||
("bpy.types.rendersettings.fps_base*", "render/output/properties/format.html#bpy-types-rendersettings-fps-base"),
|
||||
("bpy.types.rendersettings.fps_base*", "render/output/properties/dimensions.html#bpy-types-rendersettings-fps-base"),
|
||||
("bpy.types.rigidbodyobject.enabled*", "physics/rigid_body/properties/settings.html#bpy-types-rigidbodyobject-enabled"),
|
||||
("bpy.types.sceneeevee.use_overscan*", "render/eevee/render_settings/film.html#bpy-types-sceneeevee-use-overscan"),
|
||||
("bpy.types.sequencetransform.scale*", "video_editing/sequencer/sidebar/strip.html#bpy-types-sequencetransform-scale"),
|
||||
@@ -994,13 +965,13 @@ url_manual_mapping = (
|
||||
("bpy.types.shadernodevolumescatter*", "render/shader_nodes/shader/volume_scatter.html#bpy-types-shadernodevolumescatter"),
|
||||
("bpy.types.simplifygpencilmodifier*", "grease_pencil/modifiers/generate/simplify.html#bpy-types-simplifygpencilmodifier"),
|
||||
("bpy.types.spacegrapheditor.cursor*", "editors/graph_editor/introduction.html#bpy-types-spacegrapheditor-cursor"),
|
||||
("bpy.types.toolsettings.annotation*", "interface/annotate_tool.html#bpy-types-toolsettings-annotation"),
|
||||
("bpy.types.vertexweightmixmodifier*", "modeling/modifiers/modify/weight_mix.html#bpy-types-vertexweightmixmodifier"),
|
||||
("bpy.types.viewlayer.use_freestyle*", "render/freestyle/view_layer.html#bpy-types-viewlayer-use-freestyle"),
|
||||
("bpy.types.volumedisplay.use_slice*", "modeling/volumes/properties.html#bpy-types-volumedisplay-use-slice"),
|
||||
("bpy.ops.armature.armature_layers*", "animation/armatures/bones/editing/change_layers.html#bpy-ops-armature-armature-layers"),
|
||||
("bpy.ops.armature.select_linked()*", "animation/armatures/bones/selecting.html#bpy-ops-armature-select-linked"),
|
||||
("bpy.ops.clip.stabilize_2d_select*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-stabilize-2d-select"),
|
||||
("bpy.ops.constraint.move_to_index*", "animation/constraints/interface/header.html#bpy-ops-constraint-move-to-index"),
|
||||
("bpy.ops.gpencil.frame_clean_fill*", "grease_pencil/modes/edit/grease_pencil_menu.html#bpy-ops-gpencil-frame-clean-fill"),
|
||||
("bpy.ops.gpencil.stroke_subdivide*", "grease_pencil/modes/edit/stroke_menu.html#bpy-ops-gpencil-stroke-subdivide"),
|
||||
("bpy.ops.gpencil.vertex_color_hsv*", "grease_pencil/modes/vertex_paint/editing.html#bpy-ops-gpencil-vertex-color-hsv"),
|
||||
@@ -1023,7 +994,7 @@ url_manual_mapping = (
|
||||
("bpy.ops.outliner.collection_hide*", "editors/outliner/editing.html#bpy-ops-outliner-collection-hide"),
|
||||
("bpy.ops.outliner.collection_show*", "editors/outliner/editing.html#bpy-ops-outliner-collection-show"),
|
||||
("bpy.ops.paint.mask_lasso_gesture*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-paint-mask-lasso-gesture"),
|
||||
("bpy.ops.rigidbody.mass_calculate*", "scene_layout/object/editing/rigid_body.html#bpy-ops-rigidbody-mass-calculate"),
|
||||
("bpy.ops.rigidbody.mass_calculate*", "physics/rigid_body/editing.html#bpy-ops-rigidbody-mass-calculate"),
|
||||
("bpy.ops.screen.spacedata_cleanup*", "advanced/operators.html#bpy-ops-screen-spacedata-cleanup"),
|
||||
("bpy.ops.sculpt.detail_flood_fill*", "sculpt_paint/sculpting/tool_settings/dyntopo.html#bpy-ops-sculpt-detail-flood-fill"),
|
||||
("bpy.ops.sequencer.duplicate_move*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-duplicate-move"),
|
||||
@@ -1074,12 +1045,9 @@ url_manual_mapping = (
|
||||
("bpy.types.geometrynodepointscale*", "modeling/geometry_nodes/point/point_scale.html#bpy-types-geometrynodepointscale"),
|
||||
("bpy.types.imagepaint.use_occlude*", "sculpt_paint/texture_paint/tool_settings/options.html#bpy-types-imagepaint-use-occlude"),
|
||||
("bpy.types.imagesequence.use_flip*", "video_editing/sequencer/sidebar/strip.html#bpy-types-imagesequence-use-flip"),
|
||||
("bpy.types.keyframe.interpolation*", "editors/graph_editor/fcurves/properties.html#bpy-types-keyframe-interpolation"),
|
||||
("bpy.types.latticegpencilmodifier*", "grease_pencil/modifiers/deform/lattice.html#bpy-types-latticegpencilmodifier"),
|
||||
("bpy.types.lineartgpencilmodifier*", "grease_pencil/modifiers/generate/line_art.html#bpy-types-lineartgpencilmodifier"),
|
||||
("bpy.types.mesh.auto_smooth_angle*", "modeling/meshes/structure.html#bpy-types-mesh-auto-smooth-angle"),
|
||||
("bpy.types.modifier.show_viewport*", "modeling/modifiers/introduction.html#bpy-types-modifier-show-viewport"),
|
||||
("bpy.types.object.visible_diffuse*", "render/cycles/object_settings/object_data.html#bpy-types-object-visible-diffuse"),
|
||||
("bpy.types.objectsolverconstraint*", "animation/constraints/motion_tracking/object_solver.html#bpy-types-objectsolverconstraint"),
|
||||
("bpy.types.opacitygpencilmodifier*", "grease_pencil/modifiers/color/opacity.html#bpy-types-opacitygpencilmodifier"),
|
||||
("bpy.types.particlesystemmodifier*", "physics/particles/index.html#bpy-types-particlesystemmodifier"),
|
||||
@@ -1175,7 +1143,6 @@ url_manual_mapping = (
|
||||
("bpy.types.dopesheet.filter_text*", "editors/graph_editor/channels.html#bpy-types-dopesheet-filter-text"),
|
||||
("bpy.types.editbone.bbone_easein*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-easein"),
|
||||
("bpy.types.editbone.bbone_rollin*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-rollin"),
|
||||
("bpy.types.fcurve.auto_smoothing*", "editors/graph_editor/fcurves/properties.html#bpy-types-fcurve-auto-smoothing"),
|
||||
("bpy.types.fluideffectorsettings*", "physics/fluid/type/effector.html#bpy-types-fluideffectorsettings"),
|
||||
("bpy.types.followtrackconstraint*", "animation/constraints/motion_tracking/follow_track.html#bpy-types-followtrackconstraint"),
|
||||
("bpy.types.geometrynodecurveline*", "modeling/geometry_nodes/curve_primitives/line.html#bpy-types-geometrynodecurveline"),
|
||||
@@ -1184,17 +1151,12 @@ url_manual_mapping = (
|
||||
("bpy.types.geometrynodeedgesplit*", "modeling/geometry_nodes/mesh/edge_split.html#bpy-types-geometrynodeedgesplit"),
|
||||
("bpy.types.geometrynodetransform*", "modeling/geometry_nodes/geometry/transform.html#bpy-types-geometrynodetransform"),
|
||||
("bpy.types.gpencilsculptsettings*", "grease_pencil/properties/index.html#bpy-types-gpencilsculptsettings"),
|
||||
("bpy.types.keyframe.handle_right*", "editors/graph_editor/fcurves/properties.html#bpy-types-keyframe-handle-right"),
|
||||
("bpy.types.light.cutoff_distance*", "render/eevee/lighting.html#bpy-types-light-cutoff-distance"),
|
||||
("bpy.types.lockedtrackconstraint*", "animation/constraints/tracking/locked_track.html#bpy-types-lockedtrackconstraint"),
|
||||
("bpy.types.material.blend_method*", "render/eevee/materials/settings.html#bpy-types-material-blend-method"),
|
||||
("bpy.types.mirrorgpencilmodifier*", "grease_pencil/modifiers/generate/mirror.html#bpy-types-mirrorgpencilmodifier"),
|
||||
("bpy.types.modifier.show_on_cage*", "modeling/modifiers/introduction.html#bpy-types-modifier-show-on-cage"),
|
||||
("bpy.types.movietrackingcamera.k*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-k"),
|
||||
("bpy.types.node.use_custom_color*", "interface/controls/nodes/sidebar.html#bpy-types-node-use-custom-color"),
|
||||
("bpy.types.object.visible_camera*", "render/cycles/object_settings/object_data.html#bpy-types-object-visible-camera"),
|
||||
("bpy.types.object.visible_glossy*", "render/cycles/object_settings/object_data.html#bpy-types-object-visible-glossy"),
|
||||
("bpy.types.object.visible_shadow*", "render/cycles/object_settings/object_data.html#bpy-types-object-visible-shadow"),
|
||||
("bpy.types.offsetgpencilmodifier*", "grease_pencil/modifiers/deform/offset.html#bpy-types-offsetgpencilmodifier"),
|
||||
("bpy.types.posebone.custom_shape*", "animation/armatures/bones/properties/display.html#bpy-types-posebone-custom-shape"),
|
||||
("bpy.types.rendersettings.tile_x*", "render/cycles/render_settings/performance.html#bpy-types-rendersettings-tile-x"),
|
||||
@@ -1230,7 +1192,6 @@ url_manual_mapping = (
|
||||
("bpy.ops.mesh.vert_connect_path*", "modeling/meshes/editing/vertex/connect_vertex_path.html#bpy-ops-mesh-vert-connect-path"),
|
||||
("bpy.ops.nla.action_sync_length*", "editors/nla/editing.html#bpy-ops-nla-action-sync-length"),
|
||||
("bpy.ops.object.make_links_data*", "scene_layout/object/editing/link_transfer/link_data.html#bpy-ops-object-make-links-data"),
|
||||
("bpy.ops.object.modifier_remove*", "modeling/modifiers/introduction.html#bpy-ops-object-modifier-remove"),
|
||||
("bpy.ops.object.paths_calculate*", "animation/motion_paths.html#bpy-ops-object-paths-calculate"),
|
||||
("bpy.ops.object.transform_apply*", "scene_layout/object/editing/apply.html#bpy-ops-object-transform-apply"),
|
||||
("bpy.ops.outliner.lib_operation*", "files/linked_libraries/link_append.html#bpy-ops-outliner-lib-operation"),
|
||||
@@ -1271,13 +1232,11 @@ url_manual_mapping = (
|
||||
("bpy.types.geometrynodemeshline*", "modeling/geometry_nodes/mesh_primitives/line.html#bpy-types-geometrynodemeshline"),
|
||||
("bpy.types.gpencillayer.opacity*", "grease_pencil/properties/layers.html#bpy-types-gpencillayer-opacity"),
|
||||
("bpy.types.image.display_aspect*", "editors/image/sidebar.html#bpy-types-image-display-aspect"),
|
||||
("bpy.types.keyframe.handle_left*", "editors/graph_editor/fcurves/properties.html#bpy-types-keyframe-handle-left"),
|
||||
("bpy.types.keyingsetsall.active*", "editors/timeline.html#bpy-types-keyingsetsall-active"),
|
||||
("bpy.types.limitscaleconstraint*", "animation/constraints/transform/limit_scale.html#bpy-types-limitscaleconstraint"),
|
||||
("bpy.types.materialgpencilstyle*", "grease_pencil/materials/index.html#bpy-types-materialgpencilstyle"),
|
||||
("bpy.types.mesh.use_auto_smooth*", "modeling/meshes/structure.html#bpy-types-mesh-use-auto-smooth"),
|
||||
("bpy.types.meshtovolumemodifier*", "modeling/modifiers/generate/mesh_to_volume.html#bpy-types-meshtovolumemodifier"),
|
||||
("bpy.types.modifier.show_render*", "modeling/modifiers/introduction.html#bpy-types-modifier-show-render"),
|
||||
("bpy.types.noisegpencilmodifier*", "grease_pencil/modifiers/deform/noise.html#bpy-types-noisegpencilmodifier"),
|
||||
("bpy.types.object.hide_viewport*", "scene_layout/object/properties/visibility.html#bpy-types-object-hide-viewport"),
|
||||
("bpy.types.posebone.rigify_type*", "addons/rigging/rigify/rig_types/index.html#bpy-types-posebone-rigify-type"),
|
||||
@@ -1332,7 +1291,6 @@ url_manual_mapping = (
|
||||
("bpy.ops.node.tree_socket_move*", "interface/controls/nodes/groups.html#bpy-ops-node-tree-socket-move"),
|
||||
("bpy.ops.object.duplicate_move*", "scene_layout/object/editing/duplicate.html#bpy-ops-object-duplicate-move"),
|
||||
("bpy.ops.object.hook_add_selob*", "modeling/meshes/editing/vertex/hooks.html#bpy-ops-object-hook-add-selob"),
|
||||
("bpy.ops.object.modifier_apply*", "modeling/modifiers/introduction.html#bpy-ops-object-modifier-apply"),
|
||||
("bpy.ops.object.select_by_type*", "scene_layout/object/selecting.html#bpy-ops-object-select-by-type"),
|
||||
("bpy.ops.object.select_grouped*", "scene_layout/object/selecting.html#bpy-ops-object-select-grouped"),
|
||||
("bpy.ops.object.select_pattern*", "scene_layout/object/selecting.html#bpy-ops-object-select-pattern"),
|
||||
@@ -1444,7 +1402,6 @@ url_manual_mapping = (
|
||||
("bpy.ops.node.read_viewlayers*", "interface/controls/nodes/editing.html#bpy-ops-node-read-viewlayers"),
|
||||
("bpy.ops.node.tree_socket_add*", "interface/controls/nodes/groups.html#bpy-ops-node-tree-socket-add"),
|
||||
("bpy.ops.object.data_transfer*", "scene_layout/object/editing/link_transfer/transfer_mesh_data.html#bpy-ops-object-data-transfer"),
|
||||
("bpy.ops.object.modifier_copy*", "modeling/modifiers/introduction.html#bpy-ops-object-modifier-copy"),
|
||||
("bpy.ops.object.select_camera*", "scene_layout/object/selecting.html#bpy-ops-object-select-camera"),
|
||||
("bpy.ops.object.select_linked*", "scene_layout/object/selecting.html#bpy-ops-object-select-linked"),
|
||||
("bpy.ops.object.select_mirror*", "scene_layout/object/selecting.html#bpy-ops-object-select-mirror"),
|
||||
@@ -1479,15 +1436,13 @@ url_manual_mapping = (
|
||||
("bpy.types.compositornodemask*", "compositing/types/input/mask.html#bpy-types-compositornodemask"),
|
||||
("bpy.types.compositornodemath*", "compositing/types/converter/math.html#bpy-types-compositornodemath"),
|
||||
("bpy.types.compositornodetime*", "compositing/types/input/time.html#bpy-types-compositornodetime"),
|
||||
("bpy.types.constraint.enabled*", "animation/constraints/interface/header.html#bpy-types-constraint-enabled"),
|
||||
("bpy.types.curve.bevel_object*", "modeling/curves/properties/geometry.html#bpy-types-curve-bevel-object"),
|
||||
("bpy.types.curve.resolution_u*", "modeling/curves/properties/shape.html#bpy-types-curve-resolution-u"),
|
||||
("bpy.types.curve.resolution_v*", "modeling/surfaces/properties/shape.html#bpy-types-curve-resolution-v"),
|
||||
("bpy.types.curve.taper_object*", "modeling/curves/properties/geometry.html#bpy-types-curve-taper-object"),
|
||||
("bpy.types.curve.twist_smooth*", "modeling/curves/properties/shape.html#bpy-types-curve-twist-smooth"),
|
||||
("bpy.types.curvepaintsettings*", "modeling/curves/tools/draw.html#bpy-types-curvepaintsettings"),
|
||||
("bpy.types.fcurve.array_index*", "editors/graph_editor/fcurves/properties.html#bpy-types-fcurve-array-index"),
|
||||
("bpy.types.fmodifiergenerator*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifiergenerator"),
|
||||
("bpy.types.fmodifiergenerator*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifiergenerator"),
|
||||
("bpy.types.freestylelinestyle*", "render/freestyle/parameter_editor/line_style/index.html#bpy-types-freestylelinestyle"),
|
||||
("bpy.types.gammacrosssequence*", "video_editing/sequencer/strips/transitions/gamma_cross.html#bpy-types-gammacrosssequence"),
|
||||
("bpy.types.geometrynodeswitch*", "modeling/geometry_nodes/utilities/switch.html#bpy-types-geometrynodeswitch"),
|
||||
@@ -1504,7 +1459,7 @@ url_manual_mapping = (
|
||||
("bpy.types.object.hide_select*", "scene_layout/object/properties/visibility.html#bpy-types-object-hide-select"),
|
||||
("bpy.types.object.parent_type*", "scene_layout/object/properties/relations.html#bpy-types-object-parent-type"),
|
||||
("bpy.types.object.show_bounds*", "scene_layout/object/properties/display.html#bpy-types-object-show-bounds"),
|
||||
("bpy.types.rendersettings.fps*", "render/output/properties/format.html#bpy-types-rendersettings-fps"),
|
||||
("bpy.types.rendersettings.fps*", "render/output/properties/dimensions.html#bpy-types-rendersettings-fps"),
|
||||
("bpy.types.scene.audio_volume*", "scene_layout/scene/properties.html#bpy-types-scene-audio-volume"),
|
||||
("bpy.types.sculpt.detail_size*", "sculpt_paint/sculpting/tool_settings/dyntopo.html#bpy-types-sculpt-detail-size"),
|
||||
("bpy.types.shadernodebsdfhair*", "render/shader_nodes/shader/hair.html#bpy-types-shadernodebsdfhair"),
|
||||
@@ -1603,9 +1558,8 @@ url_manual_mapping = (
|
||||
("bpy.types.curve.bevel_depth*", "modeling/curves/properties/geometry.html#bpy-types-curve-bevel-depth"),
|
||||
("bpy.types.curve.use_stretch*", "modeling/curves/properties/shape.html#bpy-types-curve-use-stretch"),
|
||||
("bpy.types.edgesplitmodifier*", "modeling/modifiers/generate/edge_split.html#bpy-types-edgesplitmodifier"),
|
||||
("bpy.types.fcurve.color_mode*", "editors/graph_editor/fcurves/properties.html#bpy-types-fcurve-color-mode"),
|
||||
("bpy.types.fluidflowsettings*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings"),
|
||||
("bpy.types.fmodifierenvelope*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifierenvelope"),
|
||||
("bpy.types.fmodifierenvelope*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifierenvelope"),
|
||||
("bpy.types.freestylesettings*", "render/freestyle/view_layer.html#bpy-types-freestylesettings"),
|
||||
("bpy.types.geometrynodegroup*", "modeling/geometry_nodes/group.html#bpy-types-geometrynodegroup"),
|
||||
("bpy.types.gpencillayer.hide*", "grease_pencil/properties/layers.html#bpy-types-gpencillayer-hide"),
|
||||
@@ -1619,13 +1573,12 @@ url_manual_mapping = (
|
||||
("bpy.types.meshcachemodifier*", "modeling/modifiers/modify/mesh_cache.html#bpy-types-meshcachemodifier"),
|
||||
("bpy.types.movieclipsequence*", "video_editing/sequencer/strips/clip.html#bpy-types-movieclipsequence"),
|
||||
("bpy.types.object.dimensions*", "scene_layout/object/properties/transforms.html#bpy-types-object-dimensions"),
|
||||
("bpy.types.object.is_holdout*", "scene_layout/object/properties/visibility.html#bpy-types-object-is-holdout"),
|
||||
("bpy.types.object.pass_index*", "scene_layout/object/properties/relations.html#bpy-types-object-pass-index"),
|
||||
("bpy.types.object.track_axis*", "scene_layout/object/properties/relations.html#bpy-types-object-track-axis"),
|
||||
("bpy.types.pose.use_mirror_x*", "animation/armatures/posing/tool_settings.html#bpy-types-pose-use-mirror-x"),
|
||||
("bpy.types.preferencessystem*", "editors/preferences/system.html#bpy-types-preferencessystem"),
|
||||
("bpy.types.scene.active_clip*", "scene_layout/scene/properties.html#bpy-types-scene-active-clip"),
|
||||
("bpy.types.scene.frame_start*", "render/output/properties/frame_range.html#bpy-types-scene-frame-start"),
|
||||
("bpy.types.scene.frame_start*", "render/output/properties/dimensions.html#bpy-types-scene-frame-start"),
|
||||
("bpy.types.sceneeevee.shadow*", "render/eevee/render_settings/shadows.html#bpy-types-sceneeevee-shadow"),
|
||||
("bpy.types.screen.use_follow*", "editors/timeline.html#bpy-types-screen-use-follow"),
|
||||
("bpy.types.sequencetransform*", "video_editing/sequencer/sidebar/strip.html#bpy-types-sequencetransform"),
|
||||
@@ -1708,8 +1661,7 @@ url_manual_mapping = (
|
||||
("bpy.types.displaysafeareas*", "render/cameras.html#bpy-types-displaysafeareas"),
|
||||
("bpy.types.editbone.bbone_x*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-x"),
|
||||
("bpy.types.editbone.bbone_z*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-z"),
|
||||
("bpy.types.fcurve.data_path*", "editors/graph_editor/fcurves/properties.html#bpy-types-fcurve-data-path"),
|
||||
("bpy.types.fmodifierstepped*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifierstepped"),
|
||||
("bpy.types.fmodifierstepped*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifierstepped"),
|
||||
("bpy.types.freestylelineset*", "render/freestyle/parameter_editor/line_set.html#bpy-types-freestylelineset"),
|
||||
("bpy.types.mask.frame_start*", "movie_clip/masking/sidebar.html#bpy-types-mask-frame-start"),
|
||||
("bpy.types.mesh.*customdata*", "modeling/meshes/properties/custom_data.html#bpy-types-mesh-customdata"),
|
||||
@@ -1723,7 +1675,7 @@ url_manual_mapping = (
|
||||
("bpy.types.pose.use_auto_ik*", "animation/armatures/posing/tool_settings.html#bpy-types-pose-use-auto-ik"),
|
||||
("bpy.types.preferencesinput*", "editors/preferences/input.html#bpy-types-preferencesinput"),
|
||||
("bpy.types.rigifyparameters*", "addons/rigging/rigify/rig_types/index.html#bpy-types-rigifyparameters"),
|
||||
("bpy.types.scene.frame_step*", "render/output/properties/frame_range.html#bpy-types-scene-frame-step"),
|
||||
("bpy.types.scene.frame_step*", "render/output/properties/dimensions.html#bpy-types-scene-frame-step"),
|
||||
("bpy.types.sceneeevee.bloom*", "render/eevee/render_settings/bloom.html#bpy-types-sceneeevee-bloom"),
|
||||
("bpy.types.sculpt.show_mask*", "sculpt_paint/sculpting/editing/mask.html#bpy-types-sculpt-show-mask"),
|
||||
("bpy.types.sequence.channel*", "video_editing/sequencer/sidebar/strip.html#bpy-types-sequence-channel"),
|
||||
@@ -1756,7 +1708,6 @@ url_manual_mapping = (
|
||||
("bpy.ops.clip.clean_tracks*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-clean-tracks"),
|
||||
("bpy.ops.clip.delete_track*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-delete-track"),
|
||||
("bpy.ops.clip.solve_camera*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-solve-camera"),
|
||||
("bpy.ops.constraint.delete*", "animation/constraints/interface/header.html#bpy-ops-constraint-delete"),
|
||||
("bpy.ops.curve.smooth_tilt*", "modeling/curves/editing/control_points.html#bpy-ops-curve-smooth-tilt"),
|
||||
("bpy.ops.fluid.bake_guides*", "physics/fluid/type/domain/guides.html#bpy-ops-fluid-bake-guides"),
|
||||
("bpy.ops.fluid.free_guides*", "physics/fluid/type/domain/guides.html#bpy-ops-fluid-free-guides"),
|
||||
@@ -1800,16 +1751,15 @@ url_manual_mapping = (
|
||||
("bpy.types.booleanmodifier*", "modeling/modifiers/generate/booleans.html#bpy-types-booleanmodifier"),
|
||||
("bpy.types.brush.mask_tool*", "sculpt_paint/sculpting/tools/mask.html#bpy-types-brush-mask-tool"),
|
||||
("bpy.types.constraint.mute*", "animation/constraints/interface/header.html#bpy-types-constraint-mute"),
|
||||
("bpy.types.constraint.name*", "animation/constraints/interface/header.html#bpy-types-constraint-name"),
|
||||
("bpy.types.curve.eval_time*", "modeling/curves/properties/path_animation.html#bpy-types-curve-eval-time"),
|
||||
("bpy.types.curve.fill_mode*", "modeling/curves/properties/shape.html#bpy-types-curve-fill-mode"),
|
||||
("bpy.types.editbone.layers*", "animation/armatures/bones/properties/relations.html#bpy-types-editbone-layers"),
|
||||
("bpy.types.editbone.parent*", "animation/armatures/bones/properties/relations.html#bpy-types-editbone-parent"),
|
||||
("bpy.types.explodemodifier*", "modeling/modifiers/physics/explode.html#bpy-types-explodemodifier"),
|
||||
("bpy.types.fcurvemodifiers*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fcurvemodifiers"),
|
||||
("bpy.types.fcurvemodifiers*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fcurvemodifiers"),
|
||||
("bpy.types.floorconstraint*", "animation/constraints/relationship/floor.html#bpy-types-floorconstraint"),
|
||||
("bpy.types.fmodifiercycles*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifiercycles"),
|
||||
("bpy.types.fmodifierlimits*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifierlimits"),
|
||||
("bpy.types.fmodifiercycles*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifiercycles"),
|
||||
("bpy.types.fmodifierlimits*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifierlimits"),
|
||||
("bpy.types.imagepaint.mode*", "sculpt_paint/texture_paint/tool_settings/texture_slots.html#bpy-types-imagepaint-mode"),
|
||||
("bpy.types.latticemodifier*", "modeling/modifiers/deform/lattice.html#bpy-types-latticemodifier"),
|
||||
("bpy.types.musgravetexture*", "render/materials/legacy_textures/types/musgrave.html#bpy-types-musgravetexture"),
|
||||
@@ -1820,7 +1770,7 @@ url_manual_mapping = (
|
||||
("bpy.types.preferencesedit*", "editors/preferences/editing.html#bpy-types-preferencesedit"),
|
||||
("bpy.types.preferencesview*", "editors/preferences/interface.html#bpy-types-preferencesview"),
|
||||
("bpy.types.rigidbodyobject*", "physics/rigid_body/index.html#bpy-types-rigidbodyobject"),
|
||||
("bpy.types.scene.frame_end*", "render/output/properties/frame_range.html#bpy-types-scene-frame-end"),
|
||||
("bpy.types.scene.frame_end*", "render/output/properties/dimensions.html#bpy-types-scene-frame-end"),
|
||||
("bpy.types.sceneeevee.gtao*", "render/eevee/render_settings/ambient_occlusion.html#bpy-types-sceneeevee-gtao"),
|
||||
("bpy.types.screen.use_play*", "editors/timeline.html#bpy-types-screen-use-play"),
|
||||
("bpy.types.shadernodebevel*", "render/shader_nodes/input/bevel.html#bpy-types-shadernodebevel"),
|
||||
@@ -1836,7 +1786,6 @@ url_manual_mapping = (
|
||||
("bpy.types.texturenodemath*", "editors/texture_node/types/converter/math.html#bpy-types-texturenodemath"),
|
||||
("bpy.types.volume.filepath*", "modeling/volumes/properties.html#bpy-types-volume-filepath"),
|
||||
("bpy.ops.clip.join_tracks*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-join-tracks"),
|
||||
("bpy.ops.constraint.apply*", "animation/constraints/interface/header.html#bpy-ops-constraint-apply"),
|
||||
("bpy.ops.curve.select_row*", "modeling/surfaces/selecting.html#bpy-ops-curve-select-row"),
|
||||
("bpy.ops.curve.tilt_clear*", "modeling/curves/editing/control_points.html#bpy-ops-curve-tilt-clear"),
|
||||
("bpy.ops.curve.vertex_add*", "modeling/curves/editing/other.html#bpy-ops-curve-vertex-add"),
|
||||
@@ -1880,8 +1829,7 @@ url_manual_mapping = (
|
||||
("bpy.types.brush.hardness*", "sculpt_paint/sculpting/tool_settings/brush_settings.html#bpy-types-brush-hardness"),
|
||||
("bpy.types.curvesmodifier*", "video_editing/sequencer/sidebar/modifiers.html#bpy-types-curvesmodifier"),
|
||||
("bpy.types.ffmpegsettings*", "render/output/properties/output.html#bpy-types-ffmpegsettings"),
|
||||
("bpy.types.fmodifiernoise*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifiernoise"),
|
||||
("bpy.types.keyframe.co_ui*", "editors/graph_editor/fcurves/properties.html#bpy-types-keyframe-co-ui"),
|
||||
("bpy.types.fmodifiernoise*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifiernoise"),
|
||||
("bpy.types.mask.frame_end*", "movie_clip/masking/sidebar.html#bpy-types-mask-frame-end"),
|
||||
("bpy.types.material.paint*", "sculpt_paint/texture_paint/index.html#bpy-types-material-paint"),
|
||||
("bpy.types.mirrormodifier*", "modeling/modifiers/generate/mirror.html#bpy-types-mirrormodifier"),
|
||||
@@ -1913,7 +1861,6 @@ url_manual_mapping = (
|
||||
("bpy.ops.clip.select_all*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-select-all"),
|
||||
("bpy.ops.clip.select_box*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-select-box"),
|
||||
("bpy.ops.clip.set_origin*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-set-origin"),
|
||||
("bpy.ops.constraint.copy*", "animation/constraints/interface/header.html#bpy-ops-constraint-copy"),
|
||||
("bpy.ops.curve.subdivide*", "modeling/curves/editing/segments.html#bpy-ops-curve-subdivide"),
|
||||
("bpy.ops.ed.undo_history*", "interface/undo_redo.html#bpy-ops-ed-undo-history"),
|
||||
("bpy.ops.file.unpack_all*", "files/blend/packed_data.html#bpy-ops-file-unpack-all"),
|
||||
@@ -1977,7 +1924,6 @@ url_manual_mapping = (
|
||||
("bpy.types.fieldsettings*", "physics/forces/force_fields/index.html#bpy-types-fieldsettings"),
|
||||
("bpy.types.imagesequence*", "video_editing/sequencer/strips/image.html#bpy-types-imagesequence"),
|
||||
("bpy.types.marbletexture*", "render/materials/legacy_textures/types/marble.html#bpy-types-marbletexture"),
|
||||
("bpy.types.modifier.name*", "modeling/modifiers/introduction.html#bpy-types-modifier-name"),
|
||||
("bpy.types.modifier.show*", "modeling/modifiers/introduction.html#bpy-types-modifier-show"),
|
||||
("bpy.types.moviesequence*", "video_editing/sequencer/strips/movie.html#bpy-types-moviesequence"),
|
||||
("bpy.types.movietracking*", "movie_clip/tracking/index.html#bpy-types-movietracking"),
|
||||
@@ -2160,7 +2106,6 @@ url_manual_mapping = (
|
||||
("bpy.types.compositor*", "compositing/index.html#bpy-types-compositor"),
|
||||
("bpy.types.constraint*", "animation/constraints/index.html#bpy-types-constraint"),
|
||||
("bpy.types.imagepaint*", "sculpt_paint/texture_paint/index.html#bpy-types-imagepaint"),
|
||||
("bpy.types.keymapitem*", "editors/preferences/keymap.html#bpy-types-keymapitem"),
|
||||
("bpy.types.lightprobe*", "render/eevee/light_probes/index.html#bpy-types-lightprobe"),
|
||||
("bpy.types.maskparent*", "movie_clip/masking/sidebar.html#bpy-types-maskparent"),
|
||||
("bpy.types.maskspline*", "movie_clip/masking/sidebar.html#bpy-types-maskspline"),
|
||||
@@ -2197,7 +2142,7 @@ url_manual_mapping = (
|
||||
("bpy.types.bone.hide*", "animation/armatures/bones/properties/display.html#bpy-types-bone-hide"),
|
||||
("bpy.types.colorramp*", "interface/controls/templates/color_ramp.html#bpy-types-colorramp"),
|
||||
("bpy.types.dopesheet*", "editors/dope_sheet/index.html#bpy-types-dopesheet"),
|
||||
("bpy.types.fmodifier*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifier"),
|
||||
("bpy.types.fmodifier*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifier"),
|
||||
("bpy.types.freestyle*", "render/freestyle/index.html#bpy-types-freestyle"),
|
||||
("bpy.types.masklayer*", "movie_clip/masking/sidebar.html#bpy-types-masklayer"),
|
||||
("bpy.types.movieclip*", "movie_clip/index.html#bpy-types-movieclip"),
|
||||
|
@@ -4299,28 +4299,6 @@ def km_curve(params):
|
||||
|
||||
# Radial control setup helpers, this operator has a lot of properties.
|
||||
|
||||
def radial_control_properties_channels(paint, prop, secondary_prop, secondary_rotation=False, color=False, zoom=False, type="float"):
|
||||
brush_path = 'tool_settings.' + paint + '.brush'
|
||||
channels_path = brush_path + ".channels.channels"
|
||||
unified = "tool_settings." + paint + ".channels.channels"
|
||||
|
||||
rotation = 'mask_texture_slot_angle' if secondary_rotation else 'texture_slot_angle'
|
||||
return {
|
||||
"properties": [
|
||||
("data_path_primary", '%s["%s"].%s_value' % (channels_path, prop, type)),
|
||||
("data_path_secondary", '%s["%s"].%s_value' % (unified, prop, type) if secondary_prop else ''),
|
||||
("use_secondary", '%s["%s"].inherit' % (channels_path, prop) if secondary_prop else ''),
|
||||
#("rotation_path", '%s["%s"].float_value' % (channels_path, rotation)),
|
||||
#("color_path", brush_path + '.cursor_color_add'),
|
||||
#("fill_color_path", brush_path + '.color' if color else ''),
|
||||
#("fill_color_override_path", unified_path + '.color' if color else ''),
|
||||
#("fill_color_override_test_path", unified_path + '.use_unified_color' if color else ''),
|
||||
#("zoom_path", 'space_data.zoom' if zoom else ''),
|
||||
#("image_id", brush_path + ''),
|
||||
#("secondary_tex", secondary_rotation),
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
def radial_control_properties(paint, prop, secondary_prop, secondary_rotation=False, color=False, zoom=False):
|
||||
brush_path = 'tool_settings.' + paint + '.brush'
|
||||
@@ -4370,32 +4348,6 @@ def _template_paint_radial_control(paint, rotation=False, secondary_rotation=Fal
|
||||
return items
|
||||
|
||||
|
||||
def _template_paint_radial_control_channels(paint, rotation=False, secondary_rotation=False, color=False, zoom=False):
|
||||
items = []
|
||||
|
||||
items.extend([
|
||||
("wm.radial_control", {"type": 'F', "value": 'PRESS'},
|
||||
radial_control_properties_channels(paint, 'radius', 'use_unified_size', type="float", secondary_rotation=secondary_rotation, color=color, zoom=zoom)),
|
||||
("wm.radial_control", {"type": 'F', "value": 'PRESS', "shift": True},
|
||||
radial_control_properties_channels(paint, 'strength', 'use_unified_strength', type="factor", secondary_rotation=secondary_rotation, color=color)),
|
||||
])
|
||||
|
||||
"""
|
||||
if rotation:
|
||||
items.extend([
|
||||
("wm.radial_control", {"type": 'F', "value": 'PRESS', "ctrl": True},
|
||||
radial_control_properties_channels(paint, 'texture_slot_angle', None, color=color)),
|
||||
])
|
||||
|
||||
if secondary_rotation:
|
||||
items.extend([
|
||||
("wm.radial_control", {"type": 'F', "value": 'PRESS', "ctrl": True, "alt": True},
|
||||
radial_control_properties_channels(paint, 'mask_texture_slot_angle', None, secondary_rotation=secondary_rotation, color=color)),
|
||||
])
|
||||
"""
|
||||
|
||||
return items
|
||||
|
||||
def km_image_paint(params):
|
||||
items = []
|
||||
keymap = (
|
||||
@@ -4563,9 +4515,6 @@ def km_sculpt(params):
|
||||
{"properties": [("mode", 'INVERT')]}),
|
||||
("sculpt.brush_stroke", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True},
|
||||
{"properties": [("mode", 'SMOOTH')]}),
|
||||
# Face Set by Topology
|
||||
("sculpt.face_set_by_topology", {"type": 'W', "value": 'PRESS', "ctrl": True},
|
||||
{"properties": [("mode", "POLY_LOOP"), ("repeat_previous", True)]}),
|
||||
# Expand
|
||||
("sculpt.expand", {"type": 'A', "value": 'PRESS', "shift": True},
|
||||
{"properties": [("target", "MASK"), ("falloff_type", "GEODESIC"), ("invert", True)]}),
|
||||
@@ -4575,8 +4524,6 @@ def km_sculpt(params):
|
||||
{"properties": [("target", "FACE_SETS"), ("falloff_type", "GEODESIC"), ("invert", False), ("use_modify_active", False)]}),
|
||||
("sculpt.expand", {"type": 'W', "value": 'PRESS', "shift": True, "alt": True},
|
||||
{"properties": [("target", "FACE_SETS"), ("falloff_type", "BOUNDARY_FACE_SET"),("invert", False), ("use_modify_active", True)]}),
|
||||
("sculpt.expand", {"type": 'W', "value": 'PRESS', "shift": True, "ctrl": True},
|
||||
{"properties": [("target", "FACE_SETS"), ("falloff_type", "POLY_LOOP"), ("invert", False), ("use_modify_active", False)]}),
|
||||
# Partial Visibility Show/hide
|
||||
("sculpt.face_set_change_visibility", {"type": 'H', "value": 'PRESS'},
|
||||
{"properties": [("mode", 'TOGGLE')]}),
|
||||
@@ -4584,6 +4531,10 @@ def km_sculpt(params):
|
||||
{"properties": [("mode", 'HIDE_ACTIVE')]}),
|
||||
("sculpt.face_set_change_visibility", {"type": 'H', "value": 'PRESS', "alt": True},
|
||||
{"properties": [("mode", 'SHOW_ALL')]}),
|
||||
("sculpt.face_set_edit", {"type": 'W', "value": 'PRESS', "ctrl": True},
|
||||
{"properties": [("mode", 'GROW')]}),
|
||||
("sculpt.face_set_edit", {"type": 'W', "value": 'PRESS', "ctrl": True, "alt": True},
|
||||
{"properties": [("mode", 'SHRINK')]}),
|
||||
# Subdivision levels
|
||||
*_template_items_object_subdivision_set(),
|
||||
("object.subdivision_set", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
|
||||
@@ -4615,8 +4566,7 @@ def km_sculpt(params):
|
||||
{"properties": [("scalar", 0.9)]}),
|
||||
("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True},
|
||||
{"properties": [("scalar", 1.0 / 0.9)]}),
|
||||
*_template_paint_radial_control_channels("sculpt", rotation=True),
|
||||
#*_template_paint_radial_control("sculpt", rotation=True),
|
||||
*_template_paint_radial_control("sculpt", rotation=True),
|
||||
# Stencil
|
||||
("brush.stencil_control", {"type": 'RIGHTMOUSE', "value": 'PRESS'},
|
||||
{"properties": [("mode", 'TRANSLATION')]}),
|
||||
@@ -5690,8 +5640,7 @@ def km_sculpt_expand_modal(_params):
|
||||
("FALLOFF_TOPOLOGY", {"type": 'TWO', "value": 'PRESS', "any": True}, None),
|
||||
("FALLOFF_TOPOLOGY_DIAGONALS", {"type": 'THREE', "value": 'PRESS', "any": True}, None),
|
||||
("FALLOFF_SPHERICAL", {"type": 'FOUR', "value": 'PRESS', "any": True}, None),
|
||||
("SNAP_ENABLE", {"type": 'LEFT_CTRL', "value": 'PRESS'}, None),
|
||||
("SNAP_DISABLE", {"type": 'LEFT_CTRL', "value": 'RELEASE'}, None),
|
||||
("SNAP_TOGGLE", {"type": 'LEFT_CTRL', "value": 'ANY'}, None),
|
||||
("LOOP_COUNT_INCREASE", {"type": 'W', "value": 'PRESS', "any": True, "repeat": True}, None),
|
||||
("LOOP_COUNT_DECREASE", {"type": 'Q', "value": 'PRESS', "any": True, "repeat": True}, None),
|
||||
("BRUSH_GRADIENT_TOGGLE", {"type": 'B', "value": 'PRESS', "any": True}, None),
|
||||
@@ -6679,26 +6628,6 @@ def km_3d_view_tool_sculpt_line_project(params):
|
||||
]},
|
||||
)
|
||||
|
||||
def km_3d_view_tool_sculpt_lasso_project(params):
|
||||
return (
|
||||
"3D View Tool: Sculpt, Lasso Project",
|
||||
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
|
||||
{"items": [
|
||||
("sculpt.project_lasso_gesture", {"type": params.tool_tweak, "value": 'ANY'},
|
||||
None),
|
||||
]},
|
||||
)
|
||||
|
||||
def km_3d_view_tool_sculpt_box_project(params):
|
||||
return (
|
||||
"3D View Tool: Sculpt, Box Project",
|
||||
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
|
||||
{"items": [
|
||||
("sculpt.project_box_gesture", {"type": params.tool_tweak, "value": 'ANY'},
|
||||
None),
|
||||
]},
|
||||
)
|
||||
|
||||
|
||||
def km_3d_view_tool_sculpt_mesh_filter(params):
|
||||
return (
|
||||
@@ -6710,16 +6639,6 @@ def km_3d_view_tool_sculpt_mesh_filter(params):
|
||||
]},
|
||||
)
|
||||
|
||||
def km_3d_view_tool_sculpt_ipmask_filter(params):
|
||||
return (
|
||||
"3D View Tool: Sculpt, IPMask Filter",
|
||||
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
|
||||
{"items": [
|
||||
("sculpt.ipmask_filter", {"type": params.tool_tweak, "value": 'ANY'},
|
||||
None)
|
||||
]},
|
||||
)
|
||||
|
||||
|
||||
def km_3d_view_tool_sculpt_cloth_filter(params):
|
||||
return (
|
||||
@@ -7337,10 +7256,7 @@ def generate_keymaps(params=None):
|
||||
km_3d_view_tool_sculpt_lasso_trim(params),
|
||||
km_3d_view_tool_sculpt_line_mask(params),
|
||||
km_3d_view_tool_sculpt_line_project(params),
|
||||
km_3d_view_tool_sculpt_lasso_project(params),
|
||||
km_3d_view_tool_sculpt_box_project(params),
|
||||
km_3d_view_tool_sculpt_mesh_filter(params),
|
||||
km_3d_view_tool_sculpt_ipmask_filter(params),
|
||||
km_3d_view_tool_sculpt_cloth_filter(params),
|
||||
km_3d_view_tool_sculpt_color_filter(params),
|
||||
km_3d_view_tool_sculpt_mask_by_color(params),
|
||||
|
@@ -85,9 +85,9 @@ class ASSET_OT_open_containing_blend_file(Operator):
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
asset_file_handle = getattr(context, 'asset_file_handle', None)
|
||||
asset_library_ref = getattr(context, 'asset_library_ref', None)
|
||||
asset_library = getattr(context, 'asset_library', None)
|
||||
|
||||
if not asset_library_ref:
|
||||
if not asset_library:
|
||||
cls.poll_message_set("No asset library selected")
|
||||
return False
|
||||
if not asset_file_handle:
|
||||
@@ -100,13 +100,13 @@ class ASSET_OT_open_containing_blend_file(Operator):
|
||||
|
||||
def execute(self, context):
|
||||
asset_file_handle = context.asset_file_handle
|
||||
asset_library_ref = context.asset_library_ref
|
||||
asset_library = context.asset_library
|
||||
|
||||
if asset_file_handle.local_id:
|
||||
self.report({'WARNING'}, "This asset is stored in the current blend file")
|
||||
return {'CANCELLED'}
|
||||
|
||||
asset_lib_path = bpy.types.AssetHandle.get_full_library_path(asset_file_handle, asset_library_ref)
|
||||
asset_lib_path = bpy.types.AssetHandle.get_full_library_path(asset_file_handle, asset_library)
|
||||
self.open_in_new_blender(asset_lib_path)
|
||||
|
||||
wm = context.window_manager
|
||||
|
@@ -42,8 +42,8 @@ def geometry_node_group_empty_new():
|
||||
def geometry_modifier_poll(context):
|
||||
ob = context.object
|
||||
|
||||
# Test object support for geometry node modifier (No hair object support yet)
|
||||
if not ob or ob.type not in {'MESH', 'POINTCLOUD', 'VOLUME', 'CURVE', 'FONT'}:
|
||||
# Test object support for geometry node modifier (No curve, or hair object support yet)
|
||||
if not ob or ob.type not in {'MESH', 'POINTCLOUD', 'VOLUME'}:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
@@ -120,6 +120,7 @@ class DATA_PT_shape_curve(CurveButtonsPanel, Panel):
|
||||
sub = col.column()
|
||||
sub.active = (curve.dimensions == '2D' or (curve.bevel_mode != 'OBJECT' and curve.dimensions == '3D'))
|
||||
sub.prop(curve, "fill_mode")
|
||||
col.prop(curve, "use_fill_deform")
|
||||
|
||||
if is_curve:
|
||||
col = layout.column()
|
||||
|
@@ -522,7 +522,6 @@ class DATA_PT_remesh(MeshButtonsPanel, Panel):
|
||||
col.prop(mesh, "use_remesh_preserve_volume", text="Volume")
|
||||
col.prop(mesh, "use_remesh_preserve_paint_mask", text="Paint Mask")
|
||||
col.prop(mesh, "use_remesh_preserve_sculpt_face_sets", text="Face Sets")
|
||||
col.prop(mesh, "use_remesh_preserve_materials", text="Materials")
|
||||
if context.preferences.experimental.use_sculpt_vertex_colors:
|
||||
col.prop(mesh, "use_remesh_preserve_vertex_colors", text="Vertex Colors")
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -417,7 +417,6 @@ class MASK_MT_select(Menu):
|
||||
|
||||
layout.operator("mask.select_box")
|
||||
layout.operator("mask.select_circle")
|
||||
layout.operator_menu_enum("mask.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
|
||||
|
@@ -267,8 +267,7 @@ class OBJECT_PT_instancing(ObjectButtonsPanel, Panel):
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
ob = context.object
|
||||
# FONT objects need (vertex) instancing for the 'Object Font' feature
|
||||
return (ob.type in {'MESH', 'EMPTY', 'POINTCLOUD', 'FONT'})
|
||||
return (ob.type in {'MESH', 'EMPTY', 'POINTCLOUD'})
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
@@ -19,16 +19,6 @@
|
||||
# <pep8 compliant>
|
||||
from bpy.types import Menu
|
||||
|
||||
channel_name_map = {
|
||||
"size" : "radius",
|
||||
"autosmooth_fset_slide":"fset_slide",
|
||||
"auto_smooth_factor": "autosmooth",
|
||||
"auto_smooth_projection": "autosmooth_projection",
|
||||
"auto_smooth_radius_factor": "autosmooth_radius_scale",
|
||||
"boundary_smooth_factor": "boundary_smooth",
|
||||
"autosmooth_fset_slide": "fset_slide",
|
||||
"topology_rake_factor": "topology_rake"
|
||||
};
|
||||
|
||||
class UnifiedPaintPanel:
|
||||
# subclass must set
|
||||
@@ -107,136 +97,6 @@ class UnifiedPaintPanel:
|
||||
return tool_settings.gpencil_vertex_paint
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def channel_unified(layout, context, brush, prop_name, icon='NONE', pressure=True, text=None,
|
||||
slider=False, header=False, expand=None, toolsettings_only=False):
|
||||
""" Generalized way of adding brush options to the UI,
|
||||
along with their pen pressure setting and global toggle, if they exist. """
|
||||
ch = brush.channels.channels[prop_name]
|
||||
finalch = ch
|
||||
|
||||
l1 = layout
|
||||
|
||||
#if ch.ui_expanded:
|
||||
# layout = layout.box().column() #.column() is a bit more compact
|
||||
|
||||
if ch.type == "BITMASK":
|
||||
layout = layout.box()
|
||||
|
||||
row = layout.row(align=True)
|
||||
|
||||
typeprop = "float_value"
|
||||
|
||||
if ch.type == "INT":
|
||||
typeprop = "int_value"
|
||||
elif ch.type == "BOOL":
|
||||
typeprop = "bool_value"
|
||||
elif ch.type == "ENUM":
|
||||
typeprop = "enum_value"
|
||||
elif ch.type == "BITMASK":
|
||||
typeprop = "flags_value"
|
||||
elif ch.type == "VEC3":
|
||||
typeprop = "color3_value"
|
||||
elif ch.type == "VEC4":
|
||||
typeprop = "color4_value"
|
||||
|
||||
if text is None:
|
||||
s = prop_name.lower().replace("_", " ").split(" ");
|
||||
text = ''
|
||||
for k in s:
|
||||
text += k[0].upper() + k[1:] + " "
|
||||
text = text.strip()
|
||||
|
||||
path = ""
|
||||
is_toolset = False
|
||||
|
||||
if ch.inherit or toolsettings_only:
|
||||
sd = context.tool_settings.sculpt
|
||||
#ensure channel exists in tool settings channel set
|
||||
sd.channels.ensure(ch)
|
||||
|
||||
finalch = sd.channels.channels[prop_name]
|
||||
is_toolset = True
|
||||
path = "tool_settings.sculpt.channels.channels[\"%s\"]" % ch.idname
|
||||
else:
|
||||
path = "tool_settings.sculpt.brush.channels.channels[\"%s\"]" % ch.idname
|
||||
|
||||
if ch.type == "BITMASK":
|
||||
row.label(text=text)
|
||||
|
||||
if header:
|
||||
row.prop_menu_enum(finalch, typeprop)
|
||||
else:
|
||||
col = layout.column()
|
||||
col.emboss = "NONE"
|
||||
for item in finalch.enum_items:
|
||||
if item.identifier in finalch.flags_value:
|
||||
itemicon = "CHECKBOX_HLT"
|
||||
else:
|
||||
itemicon = "CHECKBOX_DEHLT"
|
||||
col.prop_enum(finalch, typeprop, item.identifier, icon=itemicon)
|
||||
|
||||
elif expand is not None:
|
||||
row.prop(finalch, typeprop, icon=icon, text=text, slider=slider, expand=expand)
|
||||
else:
|
||||
row.prop(finalch, typeprop, icon=icon, text=text, slider=slider)
|
||||
|
||||
pressure = pressure and ch.type not in ["BOOL", "ENUM", "BITMASK"]
|
||||
|
||||
if pressure:
|
||||
row.prop(finalch.mappings["PRESSURE"], "enabled", text="", icon="STYLUS_PRESSURE")
|
||||
#if pressure_name:
|
||||
# row.prop(brush, pressure_name, text="")
|
||||
|
||||
#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='BRUSHES_ALL')
|
||||
if not header and ch.type != "BOOL":
|
||||
if ch.type == "BITMASK" and not toolsettings_only and ch == finalch:
|
||||
row.prop(ch, "inherit_if_unset", text="Combine With Defaults")
|
||||
|
||||
if not toolsettings_only:
|
||||
row.prop(ch, "inherit", text="", icon='BRUSHES_ALL')
|
||||
|
||||
if ch.type == "BITMASK":
|
||||
return
|
||||
|
||||
row.prop(ch, "ui_expanded", text="", icon="TRIA_DOWN" if ch.ui_expanded else "TRIA_RIGHT")
|
||||
|
||||
if ch.ui_expanded:
|
||||
for mp in finalch.mappings:
|
||||
row2 = layout.row()
|
||||
name = mp.type.lower()
|
||||
|
||||
if len(name) > 0:
|
||||
name = name[0].upper() + name[1:]
|
||||
else:
|
||||
name = "name error"
|
||||
|
||||
row2.label(text=name)
|
||||
row2.prop(mp, "enabled", text="", icon="STYLUS_PRESSURE")
|
||||
row2.prop(mp, "ui_expanded", text="", icon="TRIA_DOWN" if mp.ui_expanded else "TRIA_RIGHT")
|
||||
|
||||
if mp.ui_expanded:
|
||||
layout.template_curve_mapping(mp, "curve", brush=True)
|
||||
|
||||
col = layout.column(align=True)
|
||||
row = col.row(align=True)
|
||||
|
||||
path2 = path + ".mappings[\"%s\"].curve" % (mp.type)
|
||||
|
||||
shapes = ['SMOOTH', 'ROUND', 'ROOT', 'SHARP', 'LINE', 'MAX']
|
||||
icons = ['SMOOTHCURVE', 'SPHERECURVE', 'ROOTCURVE', 'SHARPCURVE', 'LINCURVE', 'NOCURVE']
|
||||
|
||||
for i, shape in enumerate(shapes):
|
||||
props = row.operator("brush.curve_preset_load", icon=icons[i], text="")
|
||||
props.shape = shape
|
||||
props.path = path2
|
||||
|
||||
#row2.prop(mp, "curve")
|
||||
|
||||
return row
|
||||
|
||||
@staticmethod
|
||||
def prop_unified(
|
||||
layout,
|
||||
@@ -252,14 +112,6 @@ class UnifiedPaintPanel:
|
||||
):
|
||||
""" Generalized way of adding brush options to the UI,
|
||||
along with their pen pressure setting and global toggle, if they exist. """
|
||||
|
||||
if prop_name in channel_name_map:
|
||||
prop_name = channel_name_map[prop_name]
|
||||
|
||||
if prop_name in brush.channels.channels:
|
||||
# def channel_unified(layout, context, brush, prop_name, icon='NONE', pressure=True, text=None, slider=False, header=False):
|
||||
return UnifiedPaintPanel.channel_unified(layout, context, brush, prop_name, icon=icon, text=text, slider=slider, header=header)
|
||||
|
||||
row = layout.row(align=True)
|
||||
ups = context.tool_settings.unified_paint_settings
|
||||
prop_owner = brush
|
||||
@@ -279,12 +131,6 @@ class UnifiedPaintPanel:
|
||||
|
||||
@staticmethod
|
||||
def prop_unified_color(parent, context, brush, prop_name, *, text=None):
|
||||
if context.mode == 'SCULPT':
|
||||
# def channel_unified(layout, context, brush, prop_name, icon='NONE', pressure=True, text=None,
|
||||
# slider=False, header=False, expand=None, toolsettings_only=False):
|
||||
return UnifiedPaintPanel.channel_unified(parent, context, brush, prop_name, text=text)
|
||||
|
||||
|
||||
ups = context.tool_settings.unified_paint_settings
|
||||
prop_owner = ups if ups.use_unified_color else brush
|
||||
parent.prop(prop_owner, prop_name, text=text)
|
||||
@@ -703,27 +549,15 @@ def brush_settings(layout, context, brush, popover=False):
|
||||
if context.preferences.experimental.use_sculpt_tools_tilt and capabilities.has_tilt:
|
||||
layout.prop(brush, "tilt_strength_factor", slider=True)
|
||||
|
||||
UnifiedPaintPanel.prop_unified(
|
||||
layout,
|
||||
context,
|
||||
brush,
|
||||
"hard_edge_mode",
|
||||
slider=True,
|
||||
unified_name="use_unified_hard_edge_mode",
|
||||
)
|
||||
|
||||
row = layout.row(align=True)
|
||||
|
||||
row.prop(brush, "hardness", slider=True)
|
||||
row.prop(brush, "invert_hardness_pressure", text="")
|
||||
row.prop(brush, "use_hardness_pressure", text="")
|
||||
|
||||
# auto_smooth_factor and use_inverse_smooth_pressure
|
||||
if capabilities.has_auto_smooth:
|
||||
box = layout.box().column() #.column() is a bit more compact
|
||||
|
||||
UnifiedPaintPanel.prop_unified(
|
||||
box,
|
||||
layout,
|
||||
context,
|
||||
brush,
|
||||
"auto_smooth_factor",
|
||||
@@ -731,83 +565,13 @@ def brush_settings(layout, context, brush, popover=False):
|
||||
slider=True,
|
||||
)
|
||||
|
||||
#box.prop(brush, "boundary_smooth_factor")
|
||||
#box.prop(brush, "use_weighted_smooth")
|
||||
#box.prop(brush, "preserve_faceset_boundary")
|
||||
|
||||
UnifiedPaintPanel.prop_unified(box, context, brush, "boundary_smooth_factor", slider=True)
|
||||
UnifiedPaintPanel.prop_unified(box, context, brush, "use_weighted_smooth")
|
||||
UnifiedPaintPanel.prop_unified(box, context, brush, "preserve_faceset_boundary")
|
||||
|
||||
if 1: #brush.preserve_faceset_boundary:
|
||||
UnifiedPaintPanel.prop_unified(box, context, brush, "autosmooth_fset_slide", slider=True)
|
||||
#box.prop(brush, "autosmooth_fset_slide")
|
||||
|
||||
box.prop(brush, "use_custom_auto_smooth_spacing", text="Custom Spacing")
|
||||
if brush.use_custom_auto_smooth_spacing:
|
||||
UnifiedPaintPanel.prop_unified(
|
||||
box,
|
||||
context,
|
||||
brush,
|
||||
"auto_smooth_spacing",
|
||||
slider=True,
|
||||
text="Spacing"
|
||||
)
|
||||
UnifiedPaintPanel.prop_unified(
|
||||
box,
|
||||
context,
|
||||
brush,
|
||||
"auto_smooth_projection",
|
||||
slider=True
|
||||
)
|
||||
UnifiedPaintPanel.prop_unified(
|
||||
box,
|
||||
context,
|
||||
brush,
|
||||
"auto_smooth_radius_factor",
|
||||
slider=True
|
||||
)
|
||||
elif brush.sculpt_tool == "SMOOTH":
|
||||
UnifiedPaintPanel.prop_unified(
|
||||
layout,
|
||||
context,
|
||||
brush,
|
||||
"auto_smooth_projection",
|
||||
slider=True
|
||||
)
|
||||
|
||||
|
||||
if capabilities.has_vcol_boundary_smooth:
|
||||
layout.prop(brush, "vcol_boundary_factor", slider=True)
|
||||
|
||||
# topology_rake_factor
|
||||
if (
|
||||
capabilities.has_topology_rake and
|
||||
context.sculpt_object.use_dynamic_topology_sculpting
|
||||
):
|
||||
box = layout.box().column() #.column() is a bit more compact
|
||||
|
||||
#box.prop(brush, "topology_rake_factor", slider=True)
|
||||
UnifiedPaintPanel.prop_unified(
|
||||
box,
|
||||
context,
|
||||
brush,
|
||||
"topology_rake_factor",
|
||||
slider=True,
|
||||
text="Topology Rake"
|
||||
)
|
||||
box.prop(brush, "use_custom_topology_rake_spacing", text="Custom Spacing")
|
||||
layout.prop(brush, "topology_rake_factor", slider=True)
|
||||
|
||||
if brush.use_custom_topology_rake_spacing:
|
||||
box.prop(brush, "topology_rake_spacing", text="Spacing")
|
||||
box.prop(brush, "topology_rake_projection")
|
||||
|
||||
box.prop(brush, "topology_rake_radius_factor", slider=True)
|
||||
box.prop(brush, "use_curvature_rake")
|
||||
box.prop(brush, "ignore_falloff_for_topology_rake")
|
||||
|
||||
if context.sculpt_object.use_dynamic_topology_sculpting:
|
||||
layout.prop(brush.dyntopo, "disabled", text="Disable Dyntopo")
|
||||
|
||||
# normal_weight
|
||||
if capabilities.has_normal_weight:
|
||||
layout.prop(brush, "normal_weight", slider=True)
|
||||
@@ -856,27 +620,16 @@ def brush_settings(layout, context, brush, popover=False):
|
||||
|
||||
if capabilities.has_color:
|
||||
ups = context.scene.tool_settings.unified_paint_settings
|
||||
|
||||
if context.mode == "SCULPT":
|
||||
row = layout.column(align=True)
|
||||
else:
|
||||
row = layout.row(align=True)
|
||||
|
||||
row = layout.row(align=True)
|
||||
UnifiedPaintPanel.prop_unified_color(row, context, brush, "color", text="")
|
||||
UnifiedPaintPanel.prop_unified_color(row, context, brush, "secondary_color", text="")
|
||||
|
||||
if context.mode != "SCULPT":
|
||||
row.separator()
|
||||
row.operator("paint.brush_colors_flip", icon='FILE_REFRESH', text="", emboss=False)
|
||||
row.prop(ups, "use_unified_color", text="", icon='BRUSHES_ALL')
|
||||
row.separator()
|
||||
row.operator("paint.brush_colors_flip", icon='FILE_REFRESH', text="", emboss=False)
|
||||
row.prop(ups, "use_unified_color", text="", icon='BRUSHES_ALL')
|
||||
layout.prop(brush, "blend", text="Blend Mode")
|
||||
|
||||
# Per sculpt tool options.
|
||||
|
||||
if sculpt_tool == "VCOL_BOUNDARY":
|
||||
row = layout.row()
|
||||
row.prop(brush, "vcol_boundary_exponent")
|
||||
|
||||
if sculpt_tool == 'CLAY_STRIPS':
|
||||
row = layout.row()
|
||||
row.prop(brush, "tip_roundness")
|
||||
@@ -885,7 +638,6 @@ def brush_settings(layout, context, brush, popover=False):
|
||||
layout.separator()
|
||||
layout.prop(brush, "elastic_deform_type")
|
||||
layout.prop(brush, "elastic_deform_volume_preservation", slider=True)
|
||||
layout.prop(brush, "use_surface_falloff")
|
||||
layout.separator()
|
||||
|
||||
elif sculpt_tool == 'SNAKE_HOOK':
|
||||
@@ -949,7 +701,6 @@ def brush_settings(layout, context, brush, popover=False):
|
||||
elif sculpt_tool == 'GRAB':
|
||||
layout.prop(brush, "use_grab_active_vertex")
|
||||
layout.prop(brush, "use_grab_silhouette")
|
||||
layout.prop(brush, "use_surface_falloff")
|
||||
|
||||
elif sculpt_tool == 'PAINT':
|
||||
row = layout.row(align=True)
|
||||
@@ -1003,28 +754,9 @@ def brush_settings(layout, context, brush, popover=False):
|
||||
col.prop(brush, "use_multiplane_scrape_dynamic")
|
||||
col.prop(brush, "show_multiplane_scrape_planes_preview")
|
||||
|
||||
elif sculpt_tool == 'SCENE_PROJECT':
|
||||
col = layout.column()
|
||||
col.prop(brush, "scene_project_direction_type")
|
||||
|
||||
elif sculpt_tool == 'ARRAY':
|
||||
col = layout.column()
|
||||
col.prop(brush, "array_deform_type")
|
||||
col.prop(brush, "array_count")
|
||||
col.prop(brush, "use_array_lock_orientation")
|
||||
col.prop(brush, "use_array_fill_holes")
|
||||
|
||||
elif sculpt_tool == 'SMOOTH':
|
||||
col = layout.column()
|
||||
col.prop(brush, "boundary_smooth_factor")
|
||||
|
||||
col.prop(brush, "use_weighted_smooth")
|
||||
col.prop(brush, "preserve_faceset_boundary")
|
||||
if brush.preserve_faceset_boundary:
|
||||
col.prop(brush, "autosmooth_fset_slide")
|
||||
|
||||
col.prop(brush, "smooth_deform_type")
|
||||
|
||||
if brush.smooth_deform_type == 'SURFACE':
|
||||
col.prop(brush, "surface_smooth_shape_preservation")
|
||||
col.prop(brush, "surface_smooth_current_vertex")
|
||||
@@ -1037,10 +769,6 @@ def brush_settings(layout, context, brush, popover=False):
|
||||
elif sculpt_tool == 'MASK':
|
||||
layout.row().prop(brush, "mask_tool", expand=True)
|
||||
|
||||
|
||||
layout.template_curve_mapping(brush, "pressure_size_curve")
|
||||
layout.template_curve_mapping(brush, "pressure_strength_curve", brush=True)
|
||||
|
||||
# End sculpt_tool interface.
|
||||
|
||||
# 3D and 2D Texture Paint Mode.
|
||||
@@ -1130,21 +858,7 @@ def brush_shared_settings(layout, context, brush, popover=False):
|
||||
size_prop = "size"
|
||||
if size_mode and (size_owner.use_locked_size == 'SCENE'):
|
||||
size_prop = "unprojected_radius"
|
||||
|
||||
if size or size_mode:
|
||||
if size:
|
||||
UnifiedPaintPanel.channel_unified(
|
||||
layout,
|
||||
context,
|
||||
brush,
|
||||
"radius" if size_prop == "size" else size_prop.upper(),
|
||||
text="Radius",
|
||||
slider=True,
|
||||
)
|
||||
if size_mode:
|
||||
layout.row().prop(size_owner, "use_locked_size", expand=True)
|
||||
layout.separator()
|
||||
elif size or size_mode:
|
||||
if size:
|
||||
UnifiedPaintPanel.prop_unified(
|
||||
layout,
|
||||
@@ -1160,16 +874,7 @@ def brush_shared_settings(layout, context, brush, popover=False):
|
||||
layout.row().prop(size_owner, "use_locked_size", expand=True)
|
||||
layout.separator()
|
||||
|
||||
if strength:
|
||||
UnifiedPaintPanel.channel_unified(
|
||||
layout,
|
||||
context,
|
||||
brush,
|
||||
"strength",
|
||||
slider=True
|
||||
)
|
||||
layout.separator()
|
||||
elif strength:
|
||||
if strength:
|
||||
pressure_name = "use_pressure_strength" if strength_pressure else None
|
||||
UnifiedPaintPanel.prop_unified(
|
||||
layout,
|
||||
@@ -1181,13 +886,9 @@ def brush_shared_settings(layout, context, brush, popover=False):
|
||||
slider=True,
|
||||
)
|
||||
layout.separator()
|
||||
|
||||
if direction:
|
||||
UnifiedPaintPanel.channel_unified(
|
||||
layout,
|
||||
context,
|
||||
brush,
|
||||
"direction", expand=True)
|
||||
#layout.row().prop(brush, "direction", expand=True)
|
||||
layout.row().prop(brush, "direction", expand=True)
|
||||
|
||||
|
||||
def brush_settings_advanced(layout, context, brush, popover=False):
|
||||
@@ -1210,31 +911,11 @@ def brush_settings_advanced(layout, context, brush, popover=False):
|
||||
use_accumulate = capabilities.has_accumulate
|
||||
use_frontface = True
|
||||
|
||||
UnifiedPaintPanel.channel_unified(
|
||||
layout.column(),
|
||||
context,
|
||||
brush,
|
||||
"automasking", expand=False)
|
||||
UnifiedPaintPanel.channel_unified(
|
||||
layout.column(),
|
||||
context,
|
||||
brush,
|
||||
"automasking_boundary_edges_propagation_steps")
|
||||
|
||||
"""
|
||||
col = layout.column(heading="Auto-Masking", align=True)
|
||||
|
||||
# topology automasking
|
||||
col.prop(brush, "use_automasking_topology", text="Topology")
|
||||
|
||||
col.prop(brush, "use_automasking_concave")
|
||||
|
||||
col2 = col.column()
|
||||
col2.enabled = brush.use_automasking_concave
|
||||
|
||||
col2.prop(brush, "concave_mask_factor", text="Cavity Factor")
|
||||
col2.prop(brush, "invert_automasking_concavity", text="Invert Cavity Mask")
|
||||
|
||||
# face masks automasking
|
||||
col.prop(brush, "use_automasking_face_sets", text="Face Sets")
|
||||
|
||||
@@ -1242,7 +923,6 @@ def brush_settings_advanced(layout, context, brush, popover=False):
|
||||
col.prop(brush, "use_automasking_boundary_edges", text="Mesh Boundary")
|
||||
col.prop(brush, "use_automasking_boundary_face_sets", text="Face Sets Boundary")
|
||||
col.prop(brush, "automasking_boundary_edges_propagation_steps")
|
||||
"""
|
||||
|
||||
layout.separator()
|
||||
|
||||
|
@@ -1578,7 +1578,6 @@ class CLIP_MT_select(Menu):
|
||||
|
||||
layout.operator("clip.select_box")
|
||||
layout.operator("clip.select_circle")
|
||||
layout.operator_menu_enum("clip.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
|
||||
|
@@ -394,7 +394,6 @@ class DOPESHEET_MT_select(Menu):
|
||||
layout.operator("action.select_box", text="Box Select (Axis Range)").axis_range = True
|
||||
|
||||
layout.operator("action.select_circle")
|
||||
layout.operator_menu_enum("action.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
layout.operator("action.select_column", text="Columns on Selected Keys").mode = 'KEYS'
|
||||
|
@@ -267,7 +267,7 @@ class FILEBROWSER_PT_bookmarks_system(Panel):
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
return (
|
||||
context.preferences.filepaths.show_system_bookmarks and
|
||||
not context.preferences.filepaths.hide_system_bookmarks and
|
||||
panel_poll_is_upper_region(context.region) and
|
||||
not panel_poll_is_asset_browsing(context)
|
||||
)
|
||||
@@ -345,7 +345,7 @@ class FILEBROWSER_PT_bookmarks_recents(Panel):
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
return (
|
||||
context.preferences.filepaths.show_recent_locations and
|
||||
not context.preferences.filepaths.hide_recent_locations and
|
||||
panel_poll_is_upper_region(context.region) and
|
||||
not panel_poll_is_asset_browsing(context)
|
||||
)
|
||||
|
@@ -179,7 +179,6 @@ class GRAPH_MT_select(Menu):
|
||||
props.include_handles = True
|
||||
|
||||
layout.operator("graph.select_circle")
|
||||
layout.operator_menu_enum("graph.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
layout.operator("graph.select_column", text="Columns on Selected Keys").mode = 'KEYS'
|
||||
|
@@ -289,7 +289,6 @@ class NODE_MT_select(Menu):
|
||||
|
||||
layout.operator("node.select_box").tweak = False
|
||||
layout.operator("node.select_circle")
|
||||
layout.operator_menu_enum("node.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
layout.operator("node.select_all").action = 'TOGGLE'
|
||||
|
@@ -191,6 +191,16 @@ class SEQUENCER_PT_overlay(Panel):
|
||||
pass
|
||||
|
||||
|
||||
class SEQUENCER_PT_overlay(Panel):
|
||||
bl_space_type = 'SEQUENCE_EDITOR'
|
||||
bl_region_type = 'HEADER'
|
||||
bl_label = "Overlays"
|
||||
bl_ui_units_x = 7
|
||||
|
||||
def draw(self, _context):
|
||||
pass
|
||||
|
||||
|
||||
class SEQUENCER_PT_preview_overlay(Panel):
|
||||
bl_space_type = 'SEQUENCE_EDITOR'
|
||||
bl_region_type = 'HEADER'
|
||||
@@ -1649,7 +1659,7 @@ class SEQUENCER_PT_adjust_sound(SequencerButtonsPanel, Panel):
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.use_property_split = False
|
||||
layout.use_property_split = True
|
||||
|
||||
st = context.space_data
|
||||
strip = context.active_sequence_strip
|
||||
@@ -1657,39 +1667,20 @@ class SEQUENCER_PT_adjust_sound(SequencerButtonsPanel, Panel):
|
||||
|
||||
layout.active = not strip.mute
|
||||
|
||||
col = layout.column()
|
||||
|
||||
col.prop(strip, "volume", text="Volume")
|
||||
col.prop(strip, "pitch")
|
||||
|
||||
col = layout.column()
|
||||
col.prop(strip, "pan")
|
||||
col.enabled = sound is not None and sound.use_mono
|
||||
|
||||
if sound is not None:
|
||||
col = layout.column()
|
||||
|
||||
split = col.split(factor=0.4)
|
||||
split.label(text="")
|
||||
split.prop(sound, "use_mono")
|
||||
if st.waveform_display_type == 'DEFAULT_WAVEFORMS':
|
||||
split = col.split(factor=0.4)
|
||||
split.label(text="")
|
||||
split.prop(strip, "show_waveform")
|
||||
|
||||
col = layout.column()
|
||||
|
||||
split = col.split(factor=0.4)
|
||||
split.alignment = 'RIGHT'
|
||||
split.label(text="Volume")
|
||||
split.prop(strip, "volume", text="")
|
||||
|
||||
split = col.split(factor=0.4)
|
||||
split.alignment = 'RIGHT'
|
||||
split.label(text="Pitch")
|
||||
split.prop(strip, "pitch", text="")
|
||||
|
||||
split = col.split(factor=0.4)
|
||||
split.alignment = 'RIGHT'
|
||||
split.label(text="Pan")
|
||||
audio_channels = context.scene.render.ffmpeg.audio_channels
|
||||
pan_text = ""
|
||||
if audio_channels != 'MONO' and audio_channels != 'STEREO':
|
||||
pan_text = "%.2f°" % (strip.pan * 90)
|
||||
split.prop(strip, "pan", text=pan_text)
|
||||
split.enabled = sound.use_mono and audio_channels != 'MONO'
|
||||
|
||||
col.prop(strip, "show_waveform")
|
||||
col.prop(sound, "use_mono")
|
||||
|
||||
|
||||
class SEQUENCER_PT_adjust_comp(SequencerButtonsPanel, Panel):
|
||||
|
@@ -279,16 +279,9 @@ class _defs_annotate:
|
||||
|
||||
class _defs_transform:
|
||||
|
||||
def draw_transform_sculpt_tool_settings(context, layout):
|
||||
if context.mode != 'SCULPT':
|
||||
return
|
||||
layout.prop(context.tool_settings.sculpt, "transform_deform_target")
|
||||
layout.prop(context.tool_settings.sculpt, "transform_mode")
|
||||
|
||||
@ToolDef.from_fn
|
||||
def translate():
|
||||
def draw_settings(context, layout, _tool):
|
||||
_defs_transform.draw_transform_sculpt_tool_settings(context, layout)
|
||||
_template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index(context, layout, 1)
|
||||
return dict(
|
||||
idname="builtin.move",
|
||||
@@ -304,7 +297,6 @@ class _defs_transform:
|
||||
@ToolDef.from_fn
|
||||
def rotate():
|
||||
def draw_settings(context, layout, _tool):
|
||||
_defs_transform.draw_transform_sculpt_tool_settings(context, layout)
|
||||
_template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index(context, layout, 2)
|
||||
return dict(
|
||||
idname="builtin.rotate",
|
||||
@@ -320,7 +312,6 @@ class _defs_transform:
|
||||
@ToolDef.from_fn
|
||||
def scale():
|
||||
def draw_settings(context, layout, _tool):
|
||||
_defs_transform.draw_transform_sculpt_tool_settings(context, layout)
|
||||
_template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index(context, layout, 3)
|
||||
return dict(
|
||||
idname="builtin.scale",
|
||||
@@ -376,7 +367,6 @@ class _defs_transform:
|
||||
props = tool.gizmo_group_properties("VIEW3D_GGT_xform_gizmo")
|
||||
layout.prop(props, "drag_action")
|
||||
|
||||
_defs_transform.draw_transform_sculpt_tool_settings(context, layout)
|
||||
_template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index(context, layout, 1)
|
||||
|
||||
return dict(
|
||||
@@ -1304,9 +1294,7 @@ class _defs_sculpt:
|
||||
# Use 'bpy.context' instead of 'context' since it can be None.
|
||||
prefs = bpy.context.preferences
|
||||
if not prefs.experimental.use_sculpt_vertex_colors:
|
||||
exclude_filter = {'PAINT' : True, 'SMEAR' : True}
|
||||
if not prefs.experimental.use_sculpt_uvsmooth:
|
||||
exclude_filter['UV_SMOOTH'] = True
|
||||
exclude_filter = {'PAINT', 'SMEAR'}
|
||||
|
||||
return generate_from_enum_ex(
|
||||
context,
|
||||
@@ -1424,7 +1412,6 @@ class _defs_sculpt:
|
||||
props = tool.operator_properties("sculpt.trim_lasso_gesture")
|
||||
layout.prop(props, "trim_mode", expand=False)
|
||||
layout.prop(props, "trim_orientation", expand=False)
|
||||
layout.prop(props, "trim_location", expand=False)
|
||||
layout.prop(props, "use_cursor_depth", expand=False)
|
||||
return dict(
|
||||
idname="builtin.lasso_trim",
|
||||
@@ -1439,7 +1426,6 @@ class _defs_sculpt:
|
||||
def project_line():
|
||||
def draw_settings(_context, layout, tool):
|
||||
props = tool.operator_properties("sculpt.project_line_gesture")
|
||||
layout.prop(props, "deformation_mode", expand=False)
|
||||
layout.prop(props, "use_limit_to_segment", expand=False)
|
||||
|
||||
return dict(
|
||||
@@ -1451,26 +1437,6 @@ class _defs_sculpt:
|
||||
draw_settings=draw_settings,
|
||||
)
|
||||
|
||||
@ToolDef.from_fn
|
||||
def project_lasso():
|
||||
return dict(
|
||||
idname="builtin.lasso_project",
|
||||
label="Lasso Project",
|
||||
icon="ops.sculpt.lasso_project",
|
||||
widget=None,
|
||||
keymap=(),
|
||||
)
|
||||
|
||||
@ToolDef.from_fn
|
||||
def project_box():
|
||||
return dict(
|
||||
idname="builtin.box_project",
|
||||
label="Box Project",
|
||||
icon="ops.sculpt.box_project",
|
||||
widget=None,
|
||||
keymap=(),
|
||||
)
|
||||
|
||||
@ToolDef.from_fn
|
||||
def mesh_filter():
|
||||
def draw_settings(_context, layout, tool):
|
||||
@@ -1487,8 +1453,6 @@ class _defs_sculpt:
|
||||
layout.prop(props, "sharpen_smooth_ratio", expand=False)
|
||||
layout.prop(props, "sharpen_intensify_detail_strength", expand=False)
|
||||
layout.prop(props, "sharpen_curvature_smooth_iterations", expand=False)
|
||||
elif props.type == 'SPHERE':
|
||||
layout.prop(props, "sphere_center", expand=False)
|
||||
|
||||
return dict(
|
||||
idname="builtin.mesh_filter",
|
||||
@@ -1499,23 +1463,6 @@ class _defs_sculpt:
|
||||
draw_settings=draw_settings,
|
||||
)
|
||||
|
||||
@ToolDef.from_fn
|
||||
def ipmask_filter():
|
||||
def draw_settings(_context, layout, tool):
|
||||
props = tool.operator_properties("sculpt.ipmask_filter")
|
||||
layout.prop(props, "filter_type", expand=False)
|
||||
layout.prop(props, "iterations", expand=False)
|
||||
layout.prop(props, "use_step_interpolation", expand=False)
|
||||
|
||||
return dict(
|
||||
idname="builtin.ipmask_filter",
|
||||
label="IPMask Filter",
|
||||
icon="ops.sculpt.ipmask_filter",
|
||||
widget=None,
|
||||
keymap=(),
|
||||
draw_settings=draw_settings,
|
||||
)
|
||||
|
||||
@ToolDef.from_fn
|
||||
def cloth_filter():
|
||||
def draw_settings(_context, layout, tool):
|
||||
@@ -1524,8 +1471,6 @@ class _defs_sculpt:
|
||||
layout.prop(props, "strength")
|
||||
row = layout.row(align=True)
|
||||
row.prop(props, "force_axis")
|
||||
if props.type == "PINCH":
|
||||
layout.prop(props, "pinch_origin", expand=False)
|
||||
layout.prop(props, "orientation", expand=False)
|
||||
layout.prop(props, "cloth_mass")
|
||||
layout.prop(props, "cloth_damping")
|
||||
@@ -2900,15 +2845,10 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
|
||||
_defs_sculpt.trim_box,
|
||||
_defs_sculpt.trim_lasso,
|
||||
),
|
||||
(
|
||||
_defs_sculpt.project_line,
|
||||
_defs_sculpt.project_box,
|
||||
_defs_sculpt.project_lasso,
|
||||
),
|
||||
None,
|
||||
_defs_sculpt.mesh_filter,
|
||||
_defs_sculpt.cloth_filter,
|
||||
_defs_sculpt.ipmask_filter,
|
||||
lambda context: (
|
||||
(_defs_sculpt.color_filter,)
|
||||
if context is None or (
|
||||
|
@@ -209,9 +209,9 @@ class TOPBAR_MT_editor_menus(Menu):
|
||||
|
||||
# Allow calling this menu directly (this might not be a header area).
|
||||
if getattr(context.area, "show_menus", False):
|
||||
layout.menu("TOPBAR_MT_blender", text="", icon='BLENDER')
|
||||
layout.menu("TOPBAR_MT_app", text="", icon='BLENDER')
|
||||
else:
|
||||
layout.menu("TOPBAR_MT_blender", text="Blender")
|
||||
layout.menu("TOPBAR_MT_app", text="Blender")
|
||||
|
||||
layout.menu("TOPBAR_MT_file")
|
||||
layout.menu("TOPBAR_MT_edit")
|
||||
@@ -222,7 +222,7 @@ class TOPBAR_MT_editor_menus(Menu):
|
||||
layout.menu("TOPBAR_MT_help")
|
||||
|
||||
|
||||
class TOPBAR_MT_blender(Menu):
|
||||
class TOPBAR_MT_app(Menu):
|
||||
bl_label = "Blender"
|
||||
|
||||
def draw(self, _context):
|
||||
@@ -238,7 +238,7 @@ class TOPBAR_MT_blender(Menu):
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("TOPBAR_MT_blender_system")
|
||||
layout.menu("TOPBAR_MT_app_system")
|
||||
|
||||
|
||||
class TOPBAR_MT_file_cleanup(Menu):
|
||||
@@ -430,7 +430,7 @@ class TOPBAR_MT_file_defaults(Menu):
|
||||
|
||||
|
||||
# Include technical operators here which would otherwise have no way for users to access.
|
||||
class TOPBAR_MT_blender_system(Menu):
|
||||
class TOPBAR_MT_app_system(Menu):
|
||||
bl_label = "System"
|
||||
|
||||
def draw(self, _context):
|
||||
@@ -655,7 +655,6 @@ class TOPBAR_MT_window(Menu):
|
||||
layout.separator()
|
||||
|
||||
layout.operator("screen.screenshot")
|
||||
layout.operator("screen.screenshot_area")
|
||||
|
||||
if sys.platform[:3] == "win":
|
||||
layout.separator()
|
||||
@@ -855,8 +854,8 @@ classes = (
|
||||
TOPBAR_MT_file_context_menu,
|
||||
TOPBAR_MT_workspace_menu,
|
||||
TOPBAR_MT_editor_menus,
|
||||
TOPBAR_MT_blender,
|
||||
TOPBAR_MT_blender_system,
|
||||
TOPBAR_MT_app,
|
||||
TOPBAR_MT_app_system,
|
||||
TOPBAR_MT_file,
|
||||
TOPBAR_MT_file_new,
|
||||
TOPBAR_MT_file_recover,
|
||||
|
@@ -267,6 +267,7 @@ class USERPREF_PT_interface_editors(InterfacePanel, CenterAlignMixIn, Panel):
|
||||
|
||||
col = layout.column()
|
||||
col.prop(system, "use_region_overlap")
|
||||
col.prop(view, "show_layout_ui", text="Corner Splitting")
|
||||
col.prop(view, "show_navigate_ui")
|
||||
col.prop(view, "color_picker_type")
|
||||
col.row().prop(view, "header_align")
|
||||
@@ -1454,11 +1455,13 @@ class USERPREF_PT_saveload_file_browser(SaveLoadPanel, CenterAlignMixIn, Panel):
|
||||
prefs = context.preferences
|
||||
paths = prefs.filepaths
|
||||
|
||||
col = layout.column(heading="Defaults")
|
||||
col = layout.column()
|
||||
col.prop(paths, "use_filter_files")
|
||||
col.prop(paths, "show_hidden_files_datablocks")
|
||||
col.prop(paths, "show_recent_locations")
|
||||
col.prop(paths, "show_system_bookmarks")
|
||||
|
||||
col = layout.column(heading="Hide")
|
||||
col.prop(paths, "show_hidden_files_datablocks", text="Dot File & Data-Blocks")
|
||||
col.prop(paths, "hide_recent_locations", text="Recent Locations")
|
||||
col.prop(paths, "hide_system_bookmarks", text="System Bookmarks")
|
||||
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
@@ -2248,7 +2251,6 @@ class USERPREF_PT_experimental_new_features(ExperimentalPanel, Panel):
|
||||
self._draw_items(
|
||||
context, (
|
||||
({"property": "use_sculpt_vertex_colors"}, "T71947"),
|
||||
({"property": "use_sculpt_uvsmooth"}, ""),
|
||||
({"property": "use_sculpt_tools_tilt"}, "T82877"),
|
||||
({"property": "use_extended_asset_browser"}, ("project/view/130/", "Project Page")),
|
||||
({"property": "use_override_templates"}, ("T73318", "Milestone 4")),
|
||||
|
@@ -171,7 +171,6 @@ class VIEW3D_HT_tool_header(Header):
|
||||
row.popover(panel="VIEW3D_PT_tools_weightpaint_symmetry_for_topbar", text="")
|
||||
elif mode_string == 'SCULPT':
|
||||
row.popover(panel="VIEW3D_PT_sculpt_symmetry_for_topbar", text="")
|
||||
layout.prop(context.object.data, "use_fset_boundary_mirror");
|
||||
elif mode_string == 'PAINT_VERTEX':
|
||||
row.popover(panel="VIEW3D_PT_tools_vertexpaint_symmetry_for_topbar", text="")
|
||||
|
||||
@@ -1363,7 +1362,6 @@ class VIEW3D_MT_select_object(Menu):
|
||||
|
||||
layout.operator("view3d.select_box")
|
||||
layout.operator("view3d.select_circle")
|
||||
layout.operator_menu_enum("view3d.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
|
||||
@@ -1424,7 +1422,6 @@ class VIEW3D_MT_select_pose(Menu):
|
||||
|
||||
layout.operator("view3d.select_box")
|
||||
layout.operator("view3d.select_circle")
|
||||
layout.operator_menu_enum("view3d.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
|
||||
@@ -1459,7 +1456,6 @@ class VIEW3D_MT_select_particle(Menu):
|
||||
|
||||
layout.operator("view3d.select_box")
|
||||
layout.operator("view3d.select_circle")
|
||||
layout.operator_menu_enum("view3d.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
|
||||
@@ -1566,7 +1562,6 @@ class VIEW3D_MT_select_edit_mesh(Menu):
|
||||
|
||||
layout.operator("view3d.select_box")
|
||||
layout.operator("view3d.select_circle")
|
||||
layout.operator_menu_enum("view3d.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
|
||||
@@ -1620,7 +1615,6 @@ class VIEW3D_MT_select_edit_curve(Menu):
|
||||
|
||||
layout.operator("view3d.select_box")
|
||||
layout.operator("view3d.select_circle")
|
||||
layout.operator_menu_enum("view3d.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
|
||||
@@ -1656,7 +1650,6 @@ class VIEW3D_MT_select_edit_surface(Menu):
|
||||
|
||||
layout.operator("view3d.select_box")
|
||||
layout.operator("view3d.select_circle")
|
||||
layout.operator_menu_enum("view3d.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
|
||||
@@ -1718,7 +1711,6 @@ class VIEW3D_MT_select_edit_metaball(Menu):
|
||||
|
||||
layout.operator("view3d.select_box")
|
||||
layout.operator("view3d.select_circle")
|
||||
layout.operator_menu_enum("view3d.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
|
||||
@@ -1760,7 +1752,6 @@ class VIEW3D_MT_select_edit_lattice(Menu):
|
||||
|
||||
layout.operator("view3d.select_box")
|
||||
layout.operator("view3d.select_circle")
|
||||
layout.operator_menu_enum("view3d.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
|
||||
@@ -1791,7 +1782,6 @@ class VIEW3D_MT_select_edit_armature(Menu):
|
||||
|
||||
layout.operator("view3d.select_box")
|
||||
layout.operator("view3d.select_circle")
|
||||
layout.operator_menu_enum("view3d.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
|
||||
@@ -1859,7 +1849,6 @@ class VIEW3D_MT_select_gpencil(Menu):
|
||||
|
||||
layout.operator("gpencil.select_box")
|
||||
layout.operator("gpencil.select_circle")
|
||||
layout.operator_menu_enum("gpencil.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
|
||||
@@ -1896,7 +1885,6 @@ class VIEW3D_MT_select_paint_mask(Menu):
|
||||
|
||||
layout.operator("view3d.select_box")
|
||||
layout.operator("view3d.select_circle")
|
||||
layout.operator_menu_enum("view3d.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
|
||||
@@ -1917,7 +1905,6 @@ class VIEW3D_MT_select_paint_mask_vertex(Menu):
|
||||
|
||||
layout.operator("view3d.select_box")
|
||||
layout.operator("view3d.select_circle")
|
||||
layout.operator_menu_enum("view3d.select_lasso", "mode")
|
||||
|
||||
layout.separator()
|
||||
|
||||
@@ -3062,12 +3049,6 @@ class VIEW3D_MT_sculpt(Menu):
|
||||
|
||||
props = layout.operator("object.transfer_mode", text="Transfer Sculpt Mode")
|
||||
props.use_eyedropper = True
|
||||
props.flash_object = False
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("sculpt.reset_brushes")
|
||||
|
||||
|
||||
|
||||
class VIEW3D_MT_mask(Menu):
|
||||
@@ -3706,8 +3687,6 @@ class VIEW3D_MT_edit_mesh(Menu):
|
||||
if with_bullet:
|
||||
layout.operator("mesh.convex_hull")
|
||||
|
||||
layout.operator("mesh.fair_vertices", text="Fair")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.symmetrize")
|
||||
@@ -4004,7 +3983,6 @@ class VIEW3D_MT_edit_mesh_vertices(Menu):
|
||||
layout.operator_context = 'INVOKE_REGION_WIN'
|
||||
|
||||
layout.operator("mesh.extrude_vertices_move", text="Extrude Vertices")
|
||||
layout.operator("mesh.dupli_extrude_cursor").rotate_source = True
|
||||
layout.operator("mesh.bevel", text="Bevel Vertices").affect = 'VERTICES'
|
||||
|
||||
layout.separator()
|
||||
@@ -4436,7 +4414,6 @@ class VIEW3D_MT_edit_curve_ctrlpoints(Menu):
|
||||
|
||||
if edit_object.type in {'CURVE', 'SURFACE'}:
|
||||
layout.operator("curve.extrude_move")
|
||||
layout.operator("curve.vertex_add")
|
||||
|
||||
layout.separator()
|
||||
|
||||
@@ -4765,7 +4742,6 @@ class VIEW3D_MT_edit_armature(Menu):
|
||||
layout.separator()
|
||||
|
||||
layout.operator("armature.extrude_move")
|
||||
layout.operator("armature.click_extrude")
|
||||
|
||||
if arm.use_mirror_x:
|
||||
layout.operator("armature.extrude_forked")
|
||||
@@ -5311,24 +5287,24 @@ class VIEW3D_MT_sculpt_mask_edit_pie(Menu):
|
||||
op = pie.operator("paint.mask_flood_fill", text='Clear Mask')
|
||||
op.mode = 'VALUE'
|
||||
op.value = 0.0
|
||||
|
||||
op = pie.operator("sculpt.ipmask_filter", text='IPMask Smooth')
|
||||
op.filter_type = "SMOOTH_SHARPEN"
|
||||
op.iterations = 1
|
||||
|
||||
op = pie.operator("sculpt.ipmask_filter", text='IPMask Grow')
|
||||
op.filter_type = "GROW_SHRINK"
|
||||
op.iterations = 1
|
||||
|
||||
op = pie.operator("sculpt.ipmask_filter", text='IPMask Harder')
|
||||
op.filter_type = "HARDER_SOFTER"
|
||||
op.iterations = 1
|
||||
|
||||
op = pie.operator("sculpt.ipmask_filter", text='IPMask Contrast')
|
||||
op.filter_type = "CONTRAST"
|
||||
op.iterations = 1
|
||||
|
||||
|
||||
op = pie.operator("sculpt.mask_filter", text='Smooth Mask')
|
||||
op.filter_type = 'SMOOTH'
|
||||
op.auto_iteration_count = True
|
||||
op = pie.operator("sculpt.mask_filter", text='Sharpen Mask')
|
||||
op.filter_type = 'SHARPEN'
|
||||
op.auto_iteration_count = True
|
||||
op = pie.operator("sculpt.mask_filter", text='Grow Mask')
|
||||
op.filter_type = 'GROW'
|
||||
op.auto_iteration_count = True
|
||||
op = pie.operator("sculpt.mask_filter", text='Shrink Mask')
|
||||
op.filter_type = 'SHRINK'
|
||||
op.auto_iteration_count = True
|
||||
op = pie.operator("sculpt.mask_filter", text='Increase Contrast')
|
||||
op.filter_type = 'CONTRAST_INCREASE'
|
||||
op.auto_iteration_count = False
|
||||
op = pie.operator("sculpt.mask_filter", text='Decrease Contrast')
|
||||
op.filter_type = 'CONTRAST_DECREASE'
|
||||
op.auto_iteration_count = False
|
||||
|
||||
|
||||
class VIEW3D_MT_sculpt_automasking_pie(Menu):
|
||||
@@ -5367,18 +5343,6 @@ class VIEW3D_MT_sculpt_face_sets_edit_pie(Menu):
|
||||
op = pie.operator("sculpt.face_set_change_visibility", text='Show All')
|
||||
op.mode = 'SHOW_ALL'
|
||||
|
||||
op = pie.operator("sculpt.face_sets_init", text='Init by UV Seams')
|
||||
op.mode = 'UV_SEAMS'
|
||||
|
||||
op = pie.operator("sculpt.face_sets_init", text='Init by Loose Parts')
|
||||
op.mode = 'LOOSE_PARTS'
|
||||
|
||||
op = pie.operator("sculpt.face_sets_init", text='Init by Face Sets Boundaries')
|
||||
op.mode = 'FACE_SET_BOUNDARIES'
|
||||
|
||||
op = pie.operator("sculpt.face_sets_create", text='Face Set from Selection')
|
||||
op.mode = 'SELECTION'
|
||||
|
||||
|
||||
class VIEW3D_MT_wpaint_vgroup_lock_pie(Menu):
|
||||
bl_label = "Vertex Group Locks"
|
||||
|
@@ -17,7 +17,7 @@
|
||||
# ##### END GPL LICENSE BLOCK #####
|
||||
|
||||
# <pep8 compliant>
|
||||
from bpy.types import Menu, Panel, UIList, WindowManager
|
||||
from bpy.types import Menu, Panel, UIList
|
||||
from bl_ui.properties_grease_pencil_common import (
|
||||
GreasePencilSculptOptionsPanel,
|
||||
GreasePencilDisplayPanel,
|
||||
@@ -754,78 +754,10 @@ class VIEW3D_PT_tools_brush_falloff_normal(View3DPaintPanel, Panel):
|
||||
layout.prop(ipaint, "normal_angle", text="Angle")
|
||||
|
||||
|
||||
# TODO, move to space_view3d.py
|
||||
class VIEW3D_PT_sculpt_dyntopo_advanced(Panel, View3DPaintPanel):
|
||||
bl_context = ".sculpt_mode" # dot on purpose (access from topbar)
|
||||
bl_label = "Dyntopo (Advanced)"
|
||||
#bl_options = {'DEFAULT_CLOSED'}
|
||||
bl_ui_units_x = 12
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
paint_settings = cls.paint_settings(context)
|
||||
return (context.sculpt_object and context.tool_settings.sculpt and paint_settings)
|
||||
|
||||
def draw_header(self, context):
|
||||
pass
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.use_property_split = True
|
||||
layout.use_property_decorate = False
|
||||
|
||||
tool_settings = context.tool_settings
|
||||
sculpt = tool_settings.sculpt
|
||||
settings = self.paint_settings(context)
|
||||
brush = settings.brush
|
||||
|
||||
col = layout.column()
|
||||
col.label(text="Local Brush Settings")
|
||||
|
||||
row = col.row()
|
||||
row.prop(brush.dyntopo, "disabled", text="Disable Dyntopo locally for this brush")
|
||||
|
||||
col.label(text="Overrides")
|
||||
inherit_all = "ALL" in brush.dyntopo.inherit
|
||||
|
||||
col.prop_enum(brush.dyntopo, "inherit", value="ALL", text="Use All Defaults", icon="LOCKED" if inherit_all else "UNLOCKED")
|
||||
|
||||
def do_prop(key):
|
||||
row = col.row()
|
||||
if key.upper() in brush.dyntopo.inherit:
|
||||
icon = "UNLOCKED"
|
||||
else:
|
||||
icon = "LOCKED"
|
||||
|
||||
row.prop_enum(brush.dyntopo, "inherit", value=key.upper(), icon=icon, text="")
|
||||
|
||||
row2 = row.row()
|
||||
row2.prop(brush.dyntopo, key)
|
||||
|
||||
if icon == "UNLOCKED":
|
||||
row2.enabled = False
|
||||
|
||||
if inherit_all:
|
||||
row.enabled = False
|
||||
|
||||
col = layout.column()
|
||||
do_prop("subdivide")
|
||||
do_prop("collapse")
|
||||
do_prop("cleanup")
|
||||
do_prop("spacing")
|
||||
do_prop("local_subdivide")
|
||||
do_prop("local_collapse")
|
||||
do_prop("detail_size")
|
||||
do_prop("detail_range")
|
||||
do_prop("detail_percent")
|
||||
do_prop("constant_detail")
|
||||
do_prop("mode")
|
||||
do_prop("radius_scale")
|
||||
|
||||
# TODO, move to space_view3d.py
|
||||
class VIEW3D_PT_sculpt_dyntopo(Panel, View3DPaintPanel):
|
||||
bl_context = ".sculpt_mode" # dot on purpose (access from topbar)
|
||||
bl_label = "Dynamic Mode"
|
||||
bl_label = "Dyntopo"
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
bl_ui_units_x = 12
|
||||
|
||||
@@ -857,8 +789,6 @@ class VIEW3D_PT_sculpt_dyntopo(Panel, View3DPaintPanel):
|
||||
col = layout.column()
|
||||
col.active = context.sculpt_object.use_dynamic_topology_sculpting
|
||||
|
||||
col.prop(sculpt, "use_dyntopo");
|
||||
|
||||
sub = col.column()
|
||||
sub.active = (brush and brush.sculpt_tool != 'MASK')
|
||||
if sculpt.detail_type_method in {'CONSTANT', 'MANUAL'}:
|
||||
@@ -876,15 +806,7 @@ class VIEW3D_PT_sculpt_dyntopo(Panel, View3DPaintPanel):
|
||||
if sculpt.detail_type_method in {'CONSTANT', 'MANUAL'}:
|
||||
col.operator("sculpt.detail_flood_fill")
|
||||
|
||||
col.prop(sculpt, "use_dyntopo_cleanup")
|
||||
col.prop(sculpt, "use_smooth_shading")
|
||||
col.prop(sculpt, "use_flat_vcol_shading")
|
||||
|
||||
UnifiedPaintPanel.channel_unified(layout, context, brush, "dyntopo_spacing", slider=True)
|
||||
UnifiedPaintPanel.channel_unified(layout, context, brush, "dyntopo_radius_scale", slider=True)
|
||||
|
||||
#col.prop(sculpt, "dyntopo_spacing")
|
||||
#col.prop(sculpt, "dyntopo_radius_scale");
|
||||
|
||||
|
||||
class VIEW3D_PT_sculpt_voxel_remesh(Panel, View3DPaintPanel):
|
||||
@@ -915,7 +837,6 @@ class VIEW3D_PT_sculpt_voxel_remesh(Panel, View3DPaintPanel):
|
||||
col.prop(mesh, "use_remesh_preserve_volume", text="Volume")
|
||||
col.prop(mesh, "use_remesh_preserve_paint_mask", text="Paint Mask")
|
||||
col.prop(mesh, "use_remesh_preserve_sculpt_face_sets", text="Face Sets")
|
||||
col.prop(mesh, "use_remesh_preserve_materials", text="Materials")
|
||||
if context.preferences.experimental.use_sculpt_vertex_colors:
|
||||
col.prop(mesh, "use_remesh_preserve_vertex_colors", text="Vertex Colors")
|
||||
|
||||
@@ -944,36 +865,15 @@ class VIEW3D_PT_sculpt_options(Panel, View3DPaintPanel):
|
||||
col = layout.column(heading="Display", align=True)
|
||||
col.prop(sculpt, "show_low_resolution")
|
||||
col.prop(sculpt, "use_sculpt_delay_updates")
|
||||
col.prop(sculpt, "use_fast_draw")
|
||||
col.prop(sculpt, "use_deform_only")
|
||||
col.prop(sculpt, "show_sculpt_pivot")
|
||||
col.prop(sculpt, "smooth_strength_factor")
|
||||
|
||||
col.separator()
|
||||
|
||||
brush = sculpt.brush
|
||||
UnifiedPaintPanel.channel_unified(
|
||||
layout.column(),
|
||||
context,
|
||||
brush,
|
||||
"automasking", toolsettings_only=True)
|
||||
UnifiedPaintPanel.channel_unified(
|
||||
layout.column(),
|
||||
context,
|
||||
brush,
|
||||
"automasking_boundary_edges_propagation_steps",
|
||||
toolsettings_only=True)
|
||||
|
||||
"""
|
||||
col = layout.column(heading="Auto-Masking", align=True)
|
||||
col.prop(sculpt, "use_automasking_topology", text="Topology")
|
||||
col.prop(sculpt, "use_automasking_face_sets", text="Face Sets")
|
||||
col.prop(sculpt, "use_automasking_boundary_edges", text="Mesh Boundary")
|
||||
col.prop(sculpt, "use_automasking_boundary_face_sets", text="Face Sets Boundary")
|
||||
"""
|
||||
|
||||
col.separator()
|
||||
col.operator("sculpt.set_limit_surface")
|
||||
|
||||
|
||||
class VIEW3D_PT_sculpt_options_gravity(Panel, View3DPaintPanel):
|
||||
@@ -1038,7 +938,6 @@ class VIEW3D_PT_sculpt_symmetry(Panel, View3DPaintPanel):
|
||||
row.prop(sculpt, "tile_z", text="Z", toggle=True)
|
||||
|
||||
layout.prop(sculpt, "use_symmetry_feather", text="Feather")
|
||||
layout.prop(mesh, "use_fset_boundary_mirror")
|
||||
layout.prop(sculpt, "radial_symmetry", text="Radial")
|
||||
layout.prop(sculpt, "tile_offset", text="Tile Offset")
|
||||
|
||||
@@ -1046,7 +945,6 @@ class VIEW3D_PT_sculpt_symmetry(Panel, View3DPaintPanel):
|
||||
|
||||
layout.prop(sculpt, "symmetrize_direction")
|
||||
layout.operator("sculpt.symmetrize")
|
||||
layout.prop(WindowManager.operator_properties_last("sculpt.symmetrize"), "merge_tolerance")
|
||||
|
||||
|
||||
class VIEW3D_PT_sculpt_symmetry_for_topbar(Panel):
|
||||
@@ -2380,7 +2278,6 @@ classes = (
|
||||
VIEW3D_PT_tools_grease_pencil_brush_vertex_color,
|
||||
VIEW3D_PT_tools_grease_pencil_brush_vertex_palette,
|
||||
VIEW3D_PT_tools_grease_pencil_brush_vertex_falloff,
|
||||
VIEW3D_PT_sculpt_dyntopo_advanced
|
||||
)
|
||||
|
||||
if __name__ == "__main__": # only for live edit.
|
||||
|
@@ -183,9 +183,6 @@ def object_eevee_cycles_shader_nodes_poll(context):
|
||||
def geometry_nodes_fields_poll(context):
|
||||
return context.preferences.experimental.use_geometry_nodes_fields
|
||||
|
||||
def geometry_nodes_fields_legacy_poll(context):
|
||||
return not context.preferences.experimental.use_geometry_nodes_fields
|
||||
|
||||
|
||||
# All standard node categories currently used in nodes.
|
||||
|
||||
@@ -483,26 +480,25 @@ texture_node_categories = [
|
||||
geometry_node_categories = [
|
||||
# Geometry Nodes
|
||||
GeometryNodeCategory("GEO_ATTRIBUTE", "Attribute", items=[
|
||||
NodeItem("GeometryNodeLegacyAttributeRandomize", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeMath", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeClamp", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeCompare", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeConvert", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeCurveMap", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeFill", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeMix", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeProximity", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeColorRamp", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeVectorMath", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeVectorRotate", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeSampleTexture", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeCombineXYZ", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeSeparateXYZ", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeMapRange", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAttributeTransfer", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeAttributeRemove", poll=geometry_nodes_fields_legacy_poll),
|
||||
|
||||
NodeItem("GeometryNodeAttributeRandomize"),
|
||||
NodeItem("GeometryNodeAttributeMath"),
|
||||
NodeItem("GeometryNodeAttributeCapture", poll=geometry_nodes_fields_poll),
|
||||
NodeItem("GeometryNodeAttributeClamp"),
|
||||
NodeItem("GeometryNodeAttributeCompare"),
|
||||
NodeItem("GeometryNodeAttributeConvert"),
|
||||
NodeItem("GeometryNodeAttributeCurveMap"),
|
||||
NodeItem("GeometryNodeAttributeFill"),
|
||||
NodeItem("GeometryNodeAttributeMix"),
|
||||
NodeItem("GeometryNodeAttributeProximity"),
|
||||
NodeItem("GeometryNodeAttributeColorRamp"),
|
||||
NodeItem("GeometryNodeAttributeVectorMath"),
|
||||
NodeItem("GeometryNodeAttributeVectorRotate"),
|
||||
NodeItem("GeometryNodeAttributeSampleTexture"),
|
||||
NodeItem("GeometryNodeAttributeCombineXYZ"),
|
||||
NodeItem("GeometryNodeAttributeSeparateXYZ"),
|
||||
NodeItem("GeometryNodeAttributeRemove"),
|
||||
NodeItem("GeometryNodeAttributeMapRange"),
|
||||
NodeItem("GeometryNodeAttributeTransfer"),
|
||||
]),
|
||||
GeometryNodeCategory("GEO_COLOR", "Color", items=[
|
||||
NodeItem("ShaderNodeMixRGB"),
|
||||
@@ -512,20 +508,19 @@ geometry_node_categories = [
|
||||
NodeItem("ShaderNodeCombineRGB"),
|
||||
]),
|
||||
GeometryNodeCategory("GEO_CURVE", "Curve", items=[
|
||||
NodeItem("GeometryNodeLegacyCurveSubdivide", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyCurveReverse", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyCurveSplineType", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyCurveSetHandles", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyCurveSelectHandles", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyMeshToCurve", poll=geometry_nodes_fields_legacy_poll),
|
||||
|
||||
NodeItem("GeometryNodeCurveSubdivide"),
|
||||
NodeItem("GeometryNodeCurveToMesh"),
|
||||
NodeItem("GeometryNodeCurveResample"),
|
||||
NodeItem("GeometryNodeMeshToCurve"),
|
||||
NodeItem("GeometryNodeCurveToPoints"),
|
||||
NodeItem("GeometryNodeCurveEndpoints"),
|
||||
NodeItem("GeometryNodeCurveFill"),
|
||||
NodeItem("GeometryNodeCurveTrim"),
|
||||
NodeItem("GeometryNodeCurveLength"),
|
||||
NodeItem("GeometryNodeCurveReverse"),
|
||||
NodeItem("GeometryNodeCurveSplineType"),
|
||||
NodeItem("GeometryNodeCurveSetHandles"),
|
||||
NodeItem("GeometryNodeCurveSelectHandles"),
|
||||
]),
|
||||
GeometryNodeCategory("GEO_PRIMITIVES_CURVE", "Curve Primitives", items=[
|
||||
NodeItem("GeometryNodeCurvePrimitiveLine"),
|
||||
@@ -537,14 +532,13 @@ geometry_node_categories = [
|
||||
NodeItem("GeometryNodeCurvePrimitiveBezierSegment"),
|
||||
]),
|
||||
GeometryNodeCategory("GEO_GEOMETRY", "Geometry", items=[
|
||||
NodeItem("GeometryNodeLegacyDeleteGeometry", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyRaycast", poll=geometry_nodes_fields_legacy_poll),
|
||||
|
||||
NodeItem("GeometryNodeBoundBox"),
|
||||
NodeItem("GeometryNodeConvexHull"),
|
||||
NodeItem("GeometryNodeDeleteGeometry"),
|
||||
NodeItem("GeometryNodeTransform"),
|
||||
NodeItem("GeometryNodeJoinGeometry"),
|
||||
NodeItem("GeometryNodeSeparateComponents"),
|
||||
NodeItem("GeometryNodeRaycast"),
|
||||
NodeItem("GeometryNodeSetPosition", poll=geometry_nodes_fields_poll),
|
||||
]),
|
||||
GeometryNodeCategory("GEO_INPUT", "Input", items=[
|
||||
@@ -561,11 +555,8 @@ geometry_node_categories = [
|
||||
NodeItem("GeometryNodeInputNormal", poll=geometry_nodes_fields_poll),
|
||||
]),
|
||||
GeometryNodeCategory("GEO_MATERIAL", "Material", items=[
|
||||
NodeItem("GeometryNodeLegacyMaterialAssign", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacySelectByMaterial", poll=geometry_nodes_fields_legacy_poll),
|
||||
|
||||
NodeItem("GeometryNodeMaterialAssign", poll=geometry_nodes_fields_poll),
|
||||
NodeItem("GeometryNodeMaterialSelection", poll=geometry_nodes_fields_poll),
|
||||
NodeItem("GeometryNodeMaterialAssign"),
|
||||
NodeItem("GeometryNodeSelectByMaterial"),
|
||||
NodeItem("GeometryNodeMaterialReplace"),
|
||||
]),
|
||||
GeometryNodeCategory("GEO_MESH", "Mesh", items=[
|
||||
@@ -585,14 +576,15 @@ geometry_node_categories = [
|
||||
NodeItem("GeometryNodeMeshLine"),
|
||||
NodeItem("GeometryNodeMeshUVSphere"),
|
||||
]),
|
||||
|
||||
GeometryNodeCategory("GEO_POINT", "Point", items=[
|
||||
NodeItem("GeometryNodeLegacyPointDistribute", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyPointInstance", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyPointSeparate", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyPointScale", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyPointTranslate", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyRotatePoints", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodeLegacyAlignRotationToVector", poll=geometry_nodes_fields_legacy_poll),
|
||||
NodeItem("GeometryNodePointDistribute"),
|
||||
NodeItem("GeometryNodePointInstance"),
|
||||
NodeItem("GeometryNodePointSeparate"),
|
||||
NodeItem("GeometryNodePointScale"),
|
||||
NodeItem("GeometryNodePointTranslate"),
|
||||
NodeItem("GeometryNodeRotatePoints"),
|
||||
NodeItem("GeometryNodeAlignRotationToVector"),
|
||||
]),
|
||||
GeometryNodeCategory("GEO_UTILITIES", "Utilities", items=[
|
||||
NodeItem("ShaderNodeMapRange"),
|
||||
@@ -614,8 +606,7 @@ geometry_node_categories = [
|
||||
NodeItem("GeometryNodeViewer"),
|
||||
]),
|
||||
GeometryNodeCategory("GEO_VOLUME", "Volume", items=[
|
||||
NodeItem("GeometryNodeLegacyPointsToVolume", poll=geometry_nodes_fields_legacy_poll),
|
||||
|
||||
NodeItem("GeometryNodePointsToVolume"),
|
||||
NodeItem("GeometryNodeVolumeToMesh"),
|
||||
]),
|
||||
GeometryNodeCategory("GEO_GROUP", "Group", items=node_group_items),
|
||||
|
@@ -92,7 +92,6 @@ set(SRC_DNA_INC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_texture_types.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_tracking_types.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_userdef_types.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_uuid_types.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_vec_types.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_vfont_types.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_view2d_types.h
|
||||
|
@@ -120,7 +120,7 @@ template<bool IsStrongReference> class OwnedAnonymousAttributeID {
|
||||
return BKE_anonymous_attribute_id_has_strong_references(data_);
|
||||
}
|
||||
|
||||
/** Extract the ownership of the currently wrapped anonymous id. */
|
||||
/** Extract the onwership of the currently wrapped anonymous id. */
|
||||
const AnonymousAttributeID *extract()
|
||||
{
|
||||
const AnonymousAttributeID *extracted_data = data_;
|
||||
|
@@ -66,11 +66,6 @@ bool BKE_id_attribute_remove(struct ID *id,
|
||||
struct CustomDataLayer *layer,
|
||||
struct ReportList *reports);
|
||||
|
||||
struct CustomDataLayer *BKE_id_attribute_find(const struct ID *id,
|
||||
const char *name,
|
||||
const int type,
|
||||
const AttributeDomain domain);
|
||||
|
||||
AttributeDomain BKE_id_attribute_domain(struct ID *id, struct CustomDataLayer *layer);
|
||||
int BKE_id_attribute_data_length(struct ID *id, struct CustomDataLayer *layer);
|
||||
bool BKE_id_attribute_required(struct ID *id, struct CustomDataLayer *layer);
|
||||
|
@@ -247,7 +247,7 @@ class OutputAttribute {
|
||||
GVMutableArrayPtr varray_;
|
||||
AttributeDomain domain_;
|
||||
SaveFn save_;
|
||||
std::unique_ptr<fn::GVMutableArray_GSpan> optional_span_varray_;
|
||||
std::optional<fn::GVMutableArray_GSpan> optional_span_varray_;
|
||||
bool ignore_old_values_ = false;
|
||||
bool save_has_been_called_ = false;
|
||||
|
||||
@@ -306,10 +306,9 @@ class OutputAttribute {
|
||||
|
||||
fn::GMutableSpan as_span()
|
||||
{
|
||||
if (!optional_span_varray_) {
|
||||
if (!optional_span_varray_.has_value()) {
|
||||
const bool materialize_old_values = !ignore_old_values_;
|
||||
optional_span_varray_ = std::make_unique<fn::GVMutableArray_GSpan>(*varray_,
|
||||
materialize_old_values);
|
||||
optional_span_varray_.emplace(*varray_, materialize_old_values);
|
||||
}
|
||||
fn::GVMutableArray_GSpan &span_varray = *optional_span_varray_;
|
||||
return span_varray;
|
||||
|
@@ -39,7 +39,7 @@ extern "C" {
|
||||
|
||||
/* Blender file format version. */
|
||||
#define BLENDER_FILE_VERSION BLENDER_VERSION
|
||||
#define BLENDER_FILE_SUBVERSION 24
|
||||
#define BLENDER_FILE_SUBVERSION 21
|
||||
|
||||
/* Minimum Blender version that supports reading file written with the current
|
||||
* version. Older Blender versions will test this and show a warning if the file
|
||||
|
@@ -36,8 +36,6 @@ struct Main;
|
||||
struct Scene;
|
||||
struct ToolSettings;
|
||||
struct UnifiedPaintSettings;
|
||||
struct DynTopoSettings;
|
||||
struct Sculpt;
|
||||
|
||||
// enum eCurveMappingPreset;
|
||||
|
||||
@@ -110,13 +108,8 @@ const float *BKE_brush_color_get(const struct Scene *scene, const struct Brush *
|
||||
const float *BKE_brush_secondary_color_get(const struct Scene *scene, const struct Brush *brush);
|
||||
void BKE_brush_color_set(struct Scene *scene, struct Brush *brush, const float color[3]);
|
||||
|
||||
int BKE_brush_size_get(const struct Scene *scene,
|
||||
const struct Brush *brush,
|
||||
bool use_brush_channel);
|
||||
void BKE_brush_size_set(struct Scene *scene,
|
||||
struct Brush *brush,
|
||||
int size,
|
||||
bool use_brush_channel);
|
||||
int BKE_brush_size_get(const struct Scene *scene, const struct Brush *brush);
|
||||
void BKE_brush_size_set(struct Scene *scene, struct Brush *brush, int size);
|
||||
|
||||
float BKE_brush_unprojected_radius_get(const struct Scene *scene, const struct Brush *brush);
|
||||
void BKE_brush_unprojected_radius_set(struct Scene *scene,
|
||||
@@ -144,8 +137,6 @@ void BKE_brush_scale_size(int *r_brush_size,
|
||||
float new_unprojected_radius,
|
||||
float old_unprojected_radius);
|
||||
|
||||
void BKE_brush_default_input_curves_set(struct Brush *brush);
|
||||
|
||||
/* Accessors */
|
||||
#define BKE_brush_tool_get(brush, p) \
|
||||
(CHECK_TYPE_ANY(brush, struct Brush *, const struct Brush *), \
|
||||
@@ -160,13 +151,6 @@ void BKE_brush_default_input_curves_set(struct Brush *brush);
|
||||
/* debugging only */
|
||||
void BKE_brush_debug_print_state(struct Brush *br);
|
||||
|
||||
void BKE_brush_get_dyntopo(struct Brush *brush, struct Sculpt *sd, struct DynTopoSettings *out);
|
||||
|
||||
bool BKE_brush_hard_edge_mode_get(const struct Scene *scene, const struct Brush *brush);
|
||||
void BKE_brush_hard_edge_mode_set(struct Scene *scene, struct Brush *brush, bool val);
|
||||
|
||||
float BKE_brush_fset_slide_get(const struct Scene *scene, const struct Brush *brush);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@@ -1,267 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*/
|
||||
|
||||
/** \file
|
||||
* \ingroup bke
|
||||
* \brief New brush engine for sculpt
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "RNA_types.h"
|
||||
|
||||
/*
|
||||
The new brush engine is based on command lists. These lists
|
||||
will eventually be created by a node editor.
|
||||
|
||||
Key is the concept of BrushChannels. A brush channel is
|
||||
a logical parameter with a type, input settings (e.g. pen),
|
||||
a falloff curve, etc.
|
||||
|
||||
Brush channels have a concept of inheritance. There is a
|
||||
BrushChannelSet (collection of channels) in Sculpt,
|
||||
in Brush, and in BrushCommand. Inheritence behavior
|
||||
is controller via BrushChannel->flag.
|
||||
|
||||
This should completely replace UnifiedPaintSettings.
|
||||
*/
|
||||
|
||||
#include "DNA_sculpt_brush_types.h"
|
||||
|
||||
struct BrushChannel;
|
||||
struct BlendWriter;
|
||||
struct BlendDataReader;
|
||||
struct Brush;
|
||||
struct Sculpt;
|
||||
|
||||
//#define DEBUG_CURVE_MAPPING_ALLOC
|
||||
#ifdef DEBUG_CURVE_MAPPING_ALLOC
|
||||
void namestack_push(const char *name);
|
||||
void *namestack_pop(void *passthru);
|
||||
#endif
|
||||
|
||||
typedef struct BrushMappingDef {
|
||||
int curve;
|
||||
bool enabled;
|
||||
bool inv;
|
||||
float min, max;
|
||||
int blendmode;
|
||||
float factor; // if 0, will default to 1.0
|
||||
} BrushMappingDef;
|
||||
|
||||
typedef struct BrushMappingPreset {
|
||||
// must match order of BRUSH_MAPPING_XXX enums
|
||||
struct BrushMappingDef pressure, xtilt, ytilt, angle, speed;
|
||||
} BrushMappingPreset;
|
||||
|
||||
typedef struct BrushMappingData {
|
||||
float pressure, xtilt, ytilt, angle, speed;
|
||||
} BrushMappingData;
|
||||
|
||||
#define MAX_BRUSH_ENUM_DEF 32
|
||||
|
||||
typedef struct BrushEnumDef {
|
||||
int value;
|
||||
const char identifier[64];
|
||||
char icon[32];
|
||||
const char name[64];
|
||||
const char description[512];
|
||||
} BrushEnumDef;
|
||||
|
||||
typedef struct BrushChannelType {
|
||||
char name[64], idname[64], tooltip[512];
|
||||
float min, max, soft_min, soft_max;
|
||||
BrushMappingPreset mappings;
|
||||
|
||||
int type, flag;
|
||||
int ivalue;
|
||||
float fvalue;
|
||||
float vector[4];
|
||||
|
||||
BrushEnumDef enumdef[MAX_BRUSH_ENUM_DEF]; // for enum/bitmask types
|
||||
EnumPropertyItem *rna_enumdef;
|
||||
|
||||
bool user_defined;
|
||||
} BrushChannelType;
|
||||
|
||||
typedef struct BrushCommand {
|
||||
int tool;
|
||||
float last_spacing_t[512]; // for different symmetry passes
|
||||
struct BrushChannelSet *params;
|
||||
struct BrushChannelSet *params_final;
|
||||
struct BrushChannelSet *params_mapped;
|
||||
} BrushCommand;
|
||||
|
||||
typedef struct BrushCommandList {
|
||||
BrushCommand *commands;
|
||||
int totcommand;
|
||||
} BrushCommandList;
|
||||
|
||||
void BKE_brush_channel_free_data(BrushChannel *ch);
|
||||
void BKE_brush_channel_free(BrushChannel *ch);
|
||||
void BKE_brush_channel_copy_data(BrushChannel *dst, BrushChannel *src);
|
||||
void BKE_brush_channel_init(BrushChannel *ch, BrushChannelType *def);
|
||||
|
||||
BrushChannelSet *BKE_brush_channelset_create();
|
||||
#ifdef DEBUG_CURVE_MAPPING_ALLOC
|
||||
BrushChannelSet *_BKE_brush_channelset_copy(BrushChannelSet *src);
|
||||
# define BKE_brush_channelset_copy(src) \
|
||||
(namestack_push(__func__), (BrushChannelSet *)namestack_pop(_BKE_brush_channelset_copy(src)))
|
||||
#else
|
||||
BrushChannelSet *BKE_brush_channelset_copy(BrushChannelSet *src);
|
||||
#endif
|
||||
void BKE_brush_channelset_free(BrushChannelSet *chset);
|
||||
|
||||
void BKE_brush_channelset_add(BrushChannelSet *chset, BrushChannel *ch);
|
||||
|
||||
// makes a copy of ch
|
||||
void BKE_brush_channelset_add_duplicate(BrushChannelSet *chset, BrushChannel *ch);
|
||||
|
||||
// does not add to namemap ghash
|
||||
void BKE_brush_channel_ensure_unque_name(BrushChannelSet *chset, BrushChannel *ch);
|
||||
|
||||
// does not free ch or its data
|
||||
void BKE_brush_channelset_remove(BrushChannelSet *chset, BrushChannel *ch);
|
||||
|
||||
// does not free ch or its data
|
||||
bool BKE_brush_channelset_remove_named(BrushChannelSet *chset, const char *idname);
|
||||
|
||||
// checks is a channel with existing->idname exists; if not a copy of existing is made and inserted
|
||||
void BKE_brush_channelset_ensure_existing(BrushChannelSet *chset, BrushChannel *existing);
|
||||
|
||||
BrushChannel *BKE_brush_channelset_lookup(BrushChannelSet *chset, const char *idname);
|
||||
|
||||
bool BKE_brush_channelset_has(BrushChannelSet *chset, const char *idname);
|
||||
|
||||
void BKE_brush_channelset_add_builtin(BrushChannelSet *chset, const char *idname);
|
||||
bool BKE_brush_channelset_ensure_builtin(BrushChannelSet *chset, const char *idname);
|
||||
|
||||
void BKE_brush_channelset_merge(BrushChannelSet *dst,
|
||||
BrushChannelSet *child,
|
||||
BrushChannelSet *parent);
|
||||
|
||||
void BKE_brush_resolve_channels(struct Brush *brush, struct Sculpt *sd);
|
||||
|
||||
void BKE_brush_channelset_set_final_int(BrushChannelSet *brushset,
|
||||
BrushChannelSet *toolset,
|
||||
const char *idname,
|
||||
int value);
|
||||
|
||||
int BKE_brush_channelset_get_final_int(BrushChannelSet *brushset,
|
||||
BrushChannelSet *toolset,
|
||||
const char *idname,
|
||||
BrushMappingData *mapdata);
|
||||
|
||||
int BKE_brush_channelset_get_int(BrushChannelSet *chset,
|
||||
const char *idname,
|
||||
BrushMappingData *mapdata);
|
||||
bool BKE_brush_channelset_set_int(BrushChannelSet *chset, const char *idname, int val);
|
||||
|
||||
void BKE_brush_channel_set_int(BrushChannel *ch, int val);
|
||||
float BKE_brush_channel_get_int(BrushChannel *ch, BrushMappingData *mapdata);
|
||||
|
||||
// mapdata is optional, can be NULL
|
||||
|
||||
/* mapdata may be NULL */
|
||||
float BKE_brush_channel_get_float(BrushChannel *ch, BrushMappingData *mapdata);
|
||||
void BKE_brush_channel_set_float(BrushChannel *ch, float val);
|
||||
|
||||
/* mapdata may be NULL */
|
||||
float BKE_brush_channelset_get_float(BrushChannelSet *chset,
|
||||
const char *idname,
|
||||
BrushMappingData *mapdata);
|
||||
bool BKE_brush_channelset_set_float(BrushChannelSet *chset, const char *idname, float val);
|
||||
|
||||
float BKE_brush_channelset_get_final_float(BrushChannelSet *child,
|
||||
BrushChannelSet *parent,
|
||||
const char *idname,
|
||||
BrushMappingData *mapdata);
|
||||
|
||||
void BKE_brush_channelset_set_final_float(BrushChannelSet *child,
|
||||
BrushChannelSet *parent,
|
||||
const char *idname,
|
||||
float value);
|
||||
|
||||
void BKE_brush_channel_set_vector(BrushChannel *ch, float vec[4]);
|
||||
int BKE_brush_channel_get_vector_size(BrushChannel *ch);
|
||||
|
||||
/* returns size of vector */
|
||||
int BKE_brush_channel_get_vector(BrushChannel *ch, float out[4], BrushMappingData *mapdata);
|
||||
|
||||
float BKE_brush_channelset_get_final_vector(BrushChannelSet *brushset,
|
||||
BrushChannelSet *toolset,
|
||||
const char *idname,
|
||||
float r_vec[4],
|
||||
BrushMappingData *mapdata);
|
||||
void BKE_brush_channelset_set_final_vector(BrushChannelSet *brushset,
|
||||
BrushChannelSet *toolset,
|
||||
const char *idname,
|
||||
float vec[4]);
|
||||
int BKE_brush_channelset_get_vector(BrushChannelSet *chset,
|
||||
const char *idname,
|
||||
float r_vec[4],
|
||||
BrushMappingData *mapdata);
|
||||
bool BKE_brush_channelset_set_vector(BrushChannelSet *chset, const char *idname, float vec[4]);
|
||||
|
||||
void BKE_brush_init_toolsettings(struct Sculpt *sd);
|
||||
void BKE_brush_builtin_create(struct Brush *brush, int tool);
|
||||
BrushCommandList *BKE_brush_commandlist_create();
|
||||
void BKE_brush_commandlist_free(BrushCommandList *cl);
|
||||
BrushCommand *BKE_brush_commandlist_add(BrushCommandList *cl,
|
||||
BrushChannelSet *chset_template,
|
||||
bool auto_inherit);
|
||||
BrushCommand *BKE_brush_command_init(BrushCommand *command, int tool);
|
||||
void BKE_builtin_commandlist_create(struct Brush *brush,
|
||||
BrushChannelSet *chset,
|
||||
BrushCommandList *cl,
|
||||
int tool,
|
||||
BrushMappingData *map_data); // map_data may be NULL
|
||||
void BKE_brush_channelset_read(struct BlendDataReader *reader, BrushChannelSet *cset);
|
||||
void BKE_brush_channelset_write(struct BlendWriter *writer, BrushChannelSet *cset);
|
||||
void BKE_brush_mapping_copy_data(BrushMapping *dst, BrushMapping *src);
|
||||
const char *BKE_brush_mapping_type_to_str(BrushMappingType mapping);
|
||||
const char *BKE_brush_mapping_type_to_typename(BrushMappingType mapping);
|
||||
|
||||
void BKE_brush_channelset_flag_clear(BrushChannelSet *chset, const char *channel, int flag);
|
||||
void BKE_brush_channelset_flag_set(BrushChannelSet *chset, const char *channel, int flag);
|
||||
|
||||
/* adds missing channels to exising .channels in brush.
|
||||
* if channels do not exist use BKE_brush_builtin_create.
|
||||
*/
|
||||
void BKE_brush_builtin_patch(struct Brush *brush, int tool);
|
||||
|
||||
void BKE_brush_channelset_compat_load(BrushChannelSet *chset,
|
||||
struct Brush *brush,
|
||||
bool to_channels);
|
||||
|
||||
// merge in channels the ui requested
|
||||
void BKE_brush_apply_queued_channels(BrushChannelSet *chset, bool do_override);
|
||||
void BKE_brush_channeltype_rna_check(BrushChannelType *def,
|
||||
int (*getIconFromName)(const char *name));
|
||||
bool BKE_brush_mapping_ensure_write(BrushMapping *mp);
|
||||
|
||||
void BKE_brush_channelset_apply_mapping(BrushChannelSet *chset, BrushMappingData *mapdata);
|
||||
void BKE_brush_check_toolsettings(struct Sculpt *sd);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
@@ -1,26 +0,0 @@
|
||||
struct GHash;
|
||||
struct CurveMapping;
|
||||
|
||||
typedef struct CurveMappingCache {
|
||||
struct GHash *gh;
|
||||
} CurveMappingCache;
|
||||
|
||||
bool BKE_curvemapping_equals(const struct CurveMapping *a, const struct CurveMapping *b);
|
||||
uint BKE_curvemapping_calc_hash(const struct CurveMapping *cumap);
|
||||
|
||||
CurveMappingCache *BKE_curvemapping_cache_create(void);
|
||||
CurveMapping *BKE_curvemapping_cache_get(CurveMappingCache *cache,
|
||||
CurveMapping *curve,
|
||||
bool free_input);
|
||||
void BKE_curvemapping_cache_free(CurveMappingCache *cache);
|
||||
|
||||
CurveMappingCache *BKE_curvemapping_cache_global(void);
|
||||
|
||||
// takes a curve that's already in the cache and increases its user count
|
||||
void BKE_curvemapping_cache_aquire(CurveMappingCache *cache, CurveMapping *curve);
|
||||
void BKE_curvemapping_cache_release(CurveMappingCache *cache, CurveMapping *curve);
|
||||
|
||||
bool BKE_curvemapping_in_cache(CurveMapping *curve);
|
||||
void BKE_curvemapping_cache_release_or_free(CurveMappingCache *cache, CurveMapping *curve);
|
||||
|
||||
void BKE_curvemapping_cache_exit();
|
@@ -105,8 +105,6 @@ bool CustomData_has_math(const struct CustomData *data);
|
||||
bool CustomData_has_interp(const struct CustomData *data);
|
||||
bool CustomData_bmesh_has_free(const struct CustomData *data);
|
||||
|
||||
bool CustomData_layout_is_same(const struct CustomData *_a, const struct CustomData *_b);
|
||||
|
||||
/**
|
||||
* Checks if any of the customdata layers is referenced.
|
||||
*/
|
||||
@@ -143,10 +141,6 @@ void CustomData_copy(const struct CustomData *source,
|
||||
/* BMESH_TODO, not really a public function but readfile.c needs it */
|
||||
void CustomData_update_typemap(struct CustomData *data);
|
||||
|
||||
/* copies all customdata layers without allocating data,
|
||||
* and without respect to type masks or NO_COPY/etc flags*/
|
||||
void CustomData_copy_all_layout(const struct CustomData *source, struct CustomData *dest);
|
||||
|
||||
/* same as the above, except that this will preserve existing layers, and only
|
||||
* add the layers that were not there yet */
|
||||
bool CustomData_merge(const struct CustomData *source,
|
||||
@@ -283,16 +277,6 @@ void CustomData_copy_data_named(const struct CustomData *source,
|
||||
int dest_index,
|
||||
int count);
|
||||
void CustomData_copy_elements(int type, void *src_data_ofs, void *dst_data_ofs, int count);
|
||||
|
||||
// ignores CD_MESH_ID layer if it exists
|
||||
void CustomData_bmesh_swap_data(struct CustomData *source,
|
||||
struct CustomData *dest,
|
||||
void *src_block,
|
||||
void **dest_block);
|
||||
|
||||
// simple pointer swap; will unswaps ids if a CD_MESH_ID layer exists
|
||||
void CustomData_bmesh_swap_data_simple(CustomData *data, void **block1, void **block2);
|
||||
|
||||
void CustomData_bmesh_copy_data(const struct CustomData *source,
|
||||
struct CustomData *dest,
|
||||
void *src_block,
|
||||
@@ -621,11 +605,6 @@ void CustomData_blend_write(struct BlendWriter *writer,
|
||||
struct ID *id);
|
||||
void CustomData_blend_read(struct BlendDataReader *reader, struct CustomData *data, int count);
|
||||
|
||||
void CustomData_unmark_temporary_nocopy(struct CustomData *data);
|
||||
void CustomData_mark_temporary_nocopy(struct CustomData *data);
|
||||
|
||||
int CustomData_get_elem_size(CustomDataLayer *layer);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@@ -54,11 +54,9 @@ enum {
|
||||
DT_TYPE_UV = 1 << 24,
|
||||
DT_TYPE_SHARP_FACE = 1 << 25,
|
||||
DT_TYPE_FREESTYLE_FACE = 1 << 26,
|
||||
DT_TYPE_PROPCOL = 1 << 27,
|
||||
#define DT_TYPE_MAX 28
|
||||
#define DT_TYPE_MAX 27
|
||||
|
||||
DT_TYPE_VERT_ALL = DT_TYPE_MDEFORMVERT | DT_TYPE_SHAPEKEY | DT_TYPE_SKIN | DT_TYPE_BWEIGHT_VERT |
|
||||
DT_TYPE_PROPCOL,
|
||||
DT_TYPE_VERT_ALL = DT_TYPE_MDEFORMVERT | DT_TYPE_SHAPEKEY | DT_TYPE_SKIN | DT_TYPE_BWEIGHT_VERT,
|
||||
DT_TYPE_EDGE_ALL = DT_TYPE_SHARP_EDGE | DT_TYPE_SEAM | DT_TYPE_CREASE | DT_TYPE_BWEIGHT_EDGE |
|
||||
DT_TYPE_FREESTYLE_EDGE,
|
||||
DT_TYPE_LOOP_ALL = DT_TYPE_VCOL | DT_TYPE_LNOR | DT_TYPE_UV,
|
||||
@@ -76,7 +74,7 @@ int BKE_object_data_transfer_dttype_to_cdtype(const int dtdata_type);
|
||||
int BKE_object_data_transfer_dttype_to_srcdst_index(const int dtdata_type);
|
||||
|
||||
#define DT_DATATYPE_IS_VERT(_dt) \
|
||||
ELEM(_dt, DT_TYPE_MDEFORMVERT, DT_TYPE_SHAPEKEY, DT_TYPE_SKIN, DT_TYPE_BWEIGHT_VERT, DT_TYPE_PROPCOL)
|
||||
ELEM(_dt, DT_TYPE_MDEFORMVERT, DT_TYPE_SHAPEKEY, DT_TYPE_SKIN, DT_TYPE_BWEIGHT_VERT)
|
||||
#define DT_DATATYPE_IS_EDGE(_dt) \
|
||||
ELEM(_dt, \
|
||||
DT_TYPE_CREASE, \
|
||||
@@ -96,8 +94,7 @@ enum {
|
||||
DT_MULTILAYER_INDEX_SHAPEKEY = 1,
|
||||
DT_MULTILAYER_INDEX_VCOL = 2,
|
||||
DT_MULTILAYER_INDEX_UV = 3,
|
||||
DT_MULTILAYER_INDEX_PROPCOL = 4,
|
||||
DT_MULTILAYER_INDEX_MAX = 5,
|
||||
DT_MULTILAYER_INDEX_MAX = 4,
|
||||
};
|
||||
|
||||
/* Below we keep positive values for real layers idx (generated dynamically). */
|
||||
|
@@ -82,6 +82,7 @@ DispList *BKE_displist_find(struct ListBase *lb, int type);
|
||||
void BKE_displist_normals_add(struct ListBase *lb);
|
||||
void BKE_displist_count(const struct ListBase *lb, int *totvert, int *totface, int *tottri);
|
||||
void BKE_displist_free(struct ListBase *lb);
|
||||
bool BKE_displist_has_faces(const struct ListBase *lb);
|
||||
|
||||
void BKE_displist_make_curveTypes(struct Depsgraph *depsgraph,
|
||||
const struct Scene *scene,
|
||||
@@ -93,8 +94,12 @@ void BKE_displist_make_curveTypes_forRender(struct Depsgraph *depsgraph,
|
||||
struct ListBase *dispbase,
|
||||
struct Mesh **r_final);
|
||||
void BKE_displist_make_mball(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob);
|
||||
void BKE_displist_make_mball_forRender(struct Depsgraph *depsgraph,
|
||||
struct Scene *scene,
|
||||
struct Object *ob,
|
||||
struct ListBase *dispbase);
|
||||
|
||||
void BKE_curve_calc_modifiers_pre(struct Depsgraph *depsgraph,
|
||||
bool BKE_curve_calc_modifiers_pre(struct Depsgraph *depsgraph,
|
||||
const struct Scene *scene,
|
||||
struct Object *ob,
|
||||
struct ListBase *source_nurb,
|
||||
|
@@ -1,24 +0,0 @@
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/** \file
|
||||
* \ingroup bke
|
||||
* \brief Dynamic topology remeshing API
|
||||
*/
|
||||
|
||||
typedef struct DynTopo DynTopo;
|
@@ -78,12 +78,8 @@ typedef struct FModifierTypeInfo {
|
||||
short size;
|
||||
/** #eFMI_Action_Types. */
|
||||
short acttype;
|
||||
#ifdef __cplusplus
|
||||
short requires_;
|
||||
#else
|
||||
/** #eFMI_Requirement_Flags. */
|
||||
short requires;
|
||||
#endif
|
||||
/** name of modifier in interface. */
|
||||
char name[64];
|
||||
/** name of struct for SDNA. */
|
||||
|
@@ -103,7 +103,6 @@ class GeometryComponent {
|
||||
virtual int attribute_domain_size(const AttributeDomain domain) const;
|
||||
|
||||
bool attribute_is_builtin(const blender::StringRef attribute_name) const;
|
||||
bool attribute_is_builtin(const blender::bke::AttributeIDRef &attribute_id) const;
|
||||
|
||||
/* Get read-only access to the highest priority attribute with the given name.
|
||||
* Returns null if the attribute does not exist. */
|
||||
@@ -658,17 +657,10 @@ class AttributeFieldInput : public fn::FieldInput {
|
||||
{
|
||||
}
|
||||
|
||||
StringRefNull attribute_name() const
|
||||
{
|
||||
return name_;
|
||||
}
|
||||
|
||||
const GVArray *get_varray_for_context(const fn::FieldContext &context,
|
||||
IndexMask mask,
|
||||
ResourceScope &scope) const override;
|
||||
|
||||
std::string socket_inspection_name() const override;
|
||||
|
||||
uint64_t hash() const override;
|
||||
bool is_equal_to(const fn::FieldNode &other) const override;
|
||||
};
|
||||
@@ -691,8 +683,6 @@ class AnonymousAttributeFieldInput : public fn::FieldInput {
|
||||
IndexMask mask,
|
||||
ResourceScope &scope) const override;
|
||||
|
||||
std::string socket_inspection_name() const override;
|
||||
|
||||
uint64_t hash() const override;
|
||||
bool is_equal_to(const fn::FieldNode &other) const override;
|
||||
};
|
||||
|
@@ -124,10 +124,7 @@ enum {
|
||||
/** Don't overwrite these flags when reading a file. */
|
||||
#define G_FLAG_ALL_RUNTIME \
|
||||
(G_FLAG_SCRIPT_AUTOEXEC | G_FLAG_SCRIPT_OVERRIDE_PREF | G_FLAG_EVENT_SIMULATE | \
|
||||
G_FLAG_USERPREF_NO_SAVE_ON_EXIT | \
|
||||
\
|
||||
/* #BPY_python_reset is responsible for resetting these flags on file load. */ \
|
||||
G_FLAG_SCRIPT_AUTOEXEC_FAIL | G_FLAG_SCRIPT_AUTOEXEC_FAIL_QUIET)
|
||||
G_FLAG_USERPREF_NO_SAVE_ON_EXIT)
|
||||
|
||||
/** Flags to read from blend file. */
|
||||
#define G_FLAG_ALL_READFILE 0
|
||||
|
@@ -45,10 +45,8 @@ enum {
|
||||
IDTYPE_FLAGS_NO_COPY = 1 << 0,
|
||||
/** Indicates that the given IDType does not support linking/appending from a library file. */
|
||||
IDTYPE_FLAGS_NO_LIBLINKING = 1 << 1,
|
||||
/** Indicates that the given IDType should not be directly linked from a library file, but may be
|
||||
* appended.
|
||||
* NOTE: Mutually exclusive with `IDTYPE_FLAGS_NO_LIBLINKING`. */
|
||||
IDTYPE_FLAGS_ONLY_APPEND = 1 << 2,
|
||||
/** Indicates that the given IDType does not support making a library-linked ID local. */
|
||||
IDTYPE_FLAGS_NO_MAKELOCAL = 1 << 2,
|
||||
/** Indicates that the given IDType does not have animation data. */
|
||||
IDTYPE_FLAGS_NO_ANIMDATA = 1 << 3,
|
||||
};
|
||||
@@ -285,13 +283,8 @@ const struct IDTypeInfo *BKE_idtype_get_info_from_id(const struct ID *id);
|
||||
const char *BKE_idtype_idcode_to_name(const short idcode);
|
||||
const char *BKE_idtype_idcode_to_name_plural(const short idcode);
|
||||
const char *BKE_idtype_idcode_to_translation_context(const short idcode);
|
||||
|
||||
bool BKE_idtype_idcode_is_valid(const short idcode);
|
||||
|
||||
bool BKE_idtype_idcode_is_linkable(const short idcode);
|
||||
bool BKE_idtype_idcode_is_only_appendable(const short idcode);
|
||||
/* Macro currently, since any linkable IDtype should be localizable. */
|
||||
#define BKE_idtype_idcode_is_localizable BKE_idtype_idcode_is_linkable
|
||||
bool BKE_idtype_idcode_is_valid(const short idcode);
|
||||
|
||||
short BKE_idtype_idcode_from_name(const char *idtype_name);
|
||||
|
||||
|
@@ -230,7 +230,7 @@ void id_us_plus(struct ID *id);
|
||||
void id_us_min(struct ID *id);
|
||||
void id_fake_user_set(struct ID *id);
|
||||
void id_fake_user_clear(struct ID *id);
|
||||
void BKE_id_newptr_and_tag_clear(struct ID *id);
|
||||
void BKE_id_clear_newpoin(struct ID *id);
|
||||
|
||||
/** Flags to control make local code behavior. */
|
||||
enum {
|
||||
@@ -248,7 +248,7 @@ enum {
|
||||
};
|
||||
|
||||
void BKE_lib_id_make_local_generic(struct Main *bmain, struct ID *id, const int flags);
|
||||
bool BKE_lib_id_make_local(struct Main *bmain, struct ID *id, const int flags);
|
||||
bool BKE_lib_id_make_local(struct Main *bmain, struct ID *id, const bool test, const int flags);
|
||||
bool id_single_user(struct bContext *C,
|
||||
struct ID *id,
|
||||
struct PointerRNA *ptr,
|
||||
|
@@ -112,7 +112,6 @@ void BKE_libblock_relink_ex(struct Main *bmain,
|
||||
const short remap_flags) ATTR_NONNULL(1, 2);
|
||||
|
||||
void BKE_libblock_relink_to_newid(struct ID *id) ATTR_NONNULL();
|
||||
void BKE_libblock_relink_to_newid_new(struct Main *bmain, struct ID *id) ATTR_NONNULL();
|
||||
|
||||
typedef void (*BKE_library_free_notifier_reference_cb)(const void *);
|
||||
typedef void (*BKE_library_remap_editor_id_reference_cb)(struct ID *, struct ID *);
|
||||
|
@@ -69,8 +69,7 @@ extern "C" {
|
||||
|
||||
/* *** mesh.c *** */
|
||||
|
||||
struct BMesh *BKE_mesh_to_bmesh_ex(const struct Object *ob,
|
||||
const struct Mesh *me,
|
||||
struct BMesh *BKE_mesh_to_bmesh_ex(const struct Mesh *me,
|
||||
const struct BMeshCreateParams *create_params,
|
||||
const struct BMeshFromMeshParams *convert_params);
|
||||
struct BMesh *BKE_mesh_to_bmesh(struct Mesh *me,
|
||||
@@ -124,7 +123,7 @@ void BKE_mesh_eval_delete(struct Mesh *mesh_eval);
|
||||
|
||||
/* Performs copy for use during evaluation,
|
||||
* optional referencing original arrays to reduce memory. */
|
||||
struct Mesh *BKE_mesh_copy_for_eval(const struct Mesh *source, bool reference);
|
||||
struct Mesh *BKE_mesh_copy_for_eval(struct Mesh *source, bool reference);
|
||||
|
||||
/* These functions construct a new Mesh,
|
||||
* contrary to BKE_mesh_to_curve_nurblist which modifies ob itself. */
|
||||
@@ -637,7 +636,7 @@ void BKE_mesh_calc_edges_tessface(struct Mesh *mesh);
|
||||
|
||||
/* In DerivedMesh.cc */
|
||||
void BKE_mesh_wrapper_deferred_finalize(struct Mesh *me_eval,
|
||||
const struct CustomData_MeshMasks *cd_mask_finalize);
|
||||
const CustomData_MeshMasks *cd_mask_finalize);
|
||||
|
||||
/* **** Depsgraph evaluation **** */
|
||||
|
||||
|
@@ -36,7 +36,6 @@ extern "C" {
|
||||
typedef enum eMeshFairingDepth {
|
||||
MESH_FAIRING_DEPTH_POSITION = 1,
|
||||
MESH_FAIRING_DEPTH_TANGENCY = 2,
|
||||
MESH_FAIRING_DEPTH_CURVATURE = 3,
|
||||
} eMeshFairingDepth;
|
||||
|
||||
/* affect_vertices is used to define the fairing area. Indexed by vertex index, set to true when
|
||||
|
@@ -105,28 +105,20 @@ UvVertMap *BKE_mesh_uv_vert_map_create(const struct MPoly *mpoly,
|
||||
UvMapVert *BKE_mesh_uv_vert_map_get_vert(UvVertMap *vmap, unsigned int v);
|
||||
void BKE_mesh_uv_vert_map_free(UvVertMap *vmap);
|
||||
|
||||
void BKE_mesh_vert_poly_map_create(
|
||||
MeshElemMap **r_map,
|
||||
int **r_mem,
|
||||
const struct MVert *mvert, // only needed if sort_disk_cycles is true
|
||||
const struct MEdge *medge, // only needed if sort_disk_cycles is true
|
||||
const struct MPoly *mpoly,
|
||||
const struct MLoop *mloop,
|
||||
int totvert,
|
||||
int totpoly,
|
||||
int totloop,
|
||||
const bool sort_disk_cycles); // put polys in sorted geometric order
|
||||
void BKE_mesh_vert_loop_map_create(
|
||||
MeshElemMap **r_map,
|
||||
int **r_mem,
|
||||
const struct MVert *mvert, // only needed if sort_disk_cycles is true
|
||||
const struct MEdge *medge, // only needed if sort_disk_cycles is true
|
||||
const struct MPoly *mpoly,
|
||||
const struct MLoop *mloop,
|
||||
int totvert,
|
||||
int totpoly,
|
||||
int totloop,
|
||||
const bool sort_disk_cycles); // put loops in sorted geometric order
|
||||
void BKE_mesh_vert_poly_map_create(MeshElemMap **r_map,
|
||||
int **r_mem,
|
||||
const struct MPoly *mpoly,
|
||||
const struct MLoop *mloop,
|
||||
int totvert,
|
||||
int totpoly,
|
||||
int totloop);
|
||||
void BKE_mesh_vert_loop_map_create(MeshElemMap **r_map,
|
||||
int **r_mem,
|
||||
const struct MPoly *mpoly,
|
||||
const struct MLoop *mloop,
|
||||
int totvert,
|
||||
int totpoly,
|
||||
int totloop);
|
||||
void BKE_mesh_vert_looptri_map_create(MeshElemMap **r_map,
|
||||
int **r_mem,
|
||||
const struct MVert *mvert,
|
||||
@@ -136,13 +128,7 @@ void BKE_mesh_vert_looptri_map_create(MeshElemMap **r_map,
|
||||
const struct MLoop *mloop,
|
||||
const int totloop);
|
||||
void BKE_mesh_vert_edge_map_create(
|
||||
MeshElemMap **r_map,
|
||||
int **r_mem,
|
||||
const struct MVert *mvert, // only needed if sort_disk_cycles is true
|
||||
const struct MEdge *medge,
|
||||
int totvert,
|
||||
int totedge,
|
||||
bool sort_disk_cycles); // sort verts in geometric order around edges
|
||||
MeshElemMap **r_map, int **r_mem, const struct MEdge *medge, int totvert, int totedge);
|
||||
void BKE_mesh_vert_edge_vert_map_create(
|
||||
MeshElemMap **r_map, int **r_mem, const struct MEdge *medge, int totvert, int totedge);
|
||||
void BKE_mesh_edge_loop_map_create(MeshElemMap **r_map,
|
||||
|
@@ -32,7 +32,7 @@ struct Mesh;
|
||||
struct MirrorModifierData;
|
||||
struct Object;
|
||||
|
||||
struct Mesh *BKE_mesh_mirror_bisect_on_mirror_plane_for_modifier(struct Object *ob, struct MirrorModifierData *mmd,
|
||||
struct Mesh *BKE_mesh_mirror_bisect_on_mirror_plane_for_modifier(struct MirrorModifierData *mmd,
|
||||
const struct Mesh *mesh,
|
||||
int axis,
|
||||
const float plane_co[3],
|
||||
|
@@ -47,8 +47,6 @@ struct Mesh *BKE_mesh_remesh_quadriflow(const struct Mesh *mesh,
|
||||
void BKE_mesh_remesh_reproject_paint_mask(struct Mesh *target, struct Mesh *source);
|
||||
void BKE_remesh_reproject_vertex_paint(struct Mesh *target, const struct Mesh *source);
|
||||
void BKE_remesh_reproject_sculpt_face_sets(struct Mesh *target, struct Mesh *source);
|
||||
void BKE_remesh_reproject_materials(struct Mesh *target, struct Mesh *source);
|
||||
void BKE_mesh_remesh_sculpt_array_update(struct Object *ob, struct Mesh *target, struct Mesh *source);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@@ -39,7 +39,6 @@ struct MultiresModifierData;
|
||||
struct Object;
|
||||
struct Scene;
|
||||
struct SubdivCCG;
|
||||
struct BMesh;
|
||||
|
||||
struct MLoop;
|
||||
struct MLoopTri;
|
||||
@@ -218,7 +217,6 @@ BLI_INLINE void BKE_multires_construct_tangent_matrix(float tangent_matrix[3][3]
|
||||
const float dPdv[3],
|
||||
const int corner);
|
||||
|
||||
void BKE_multires_bmesh_space_set(struct Object *ob, struct BMesh *bm, int mode);
|
||||
/* Versioning. */
|
||||
|
||||
/* Convert displacement which is stored for simply-subdivided mesh to a Catmull-Clark
|
||||
|
@@ -731,8 +731,6 @@ void nodeSetSocketAvailability(struct bNodeSocket *sock, bool is_available);
|
||||
|
||||
int nodeSocketLinkLimit(const struct bNodeSocket *sock);
|
||||
|
||||
void nodeDeclarationEnsure(struct bNodeTree *ntree, struct bNode *node);
|
||||
|
||||
/* Node Clipboard */
|
||||
void BKE_node_clipboard_init(const struct bNodeTree *ntree);
|
||||
void BKE_node_clipboard_clear(void);
|
||||
@@ -1414,34 +1412,34 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
|
||||
#define GEO_NODE_EDGE_SPLIT 1001
|
||||
#define GEO_NODE_TRANSFORM 1002
|
||||
#define GEO_NODE_BOOLEAN 1003
|
||||
#define GEO_NODE_LEGACY_POINT_DISTRIBUTE 1004
|
||||
#define GEO_NODE_LEGACY_POINT_INSTANCE 1005
|
||||
#define GEO_NODE_POINT_DISTRIBUTE 1004
|
||||
#define GEO_NODE_POINT_INSTANCE 1005
|
||||
#define GEO_NODE_SUBDIVISION_SURFACE 1006
|
||||
#define GEO_NODE_OBJECT_INFO 1007
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_RANDOMIZE 1008
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_MATH 1009
|
||||
#define GEO_NODE_ATTRIBUTE_RANDOMIZE 1008
|
||||
#define GEO_NODE_ATTRIBUTE_MATH 1009
|
||||
#define GEO_NODE_JOIN_GEOMETRY 1010
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_FILL 1011
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_MIX 1012
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_COLOR_RAMP 1013
|
||||
#define GEO_NODE_LEGACY_POINT_SEPARATE 1014
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_COMPARE 1015
|
||||
#define GEO_NODE_LEGACY_POINT_ROTATE 1016
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_VECTOR_MATH 1017
|
||||
#define GEO_NODE_LEGACY_ALIGN_ROTATION_TO_VECTOR 1018
|
||||
#define GEO_NODE_LEGACY_POINT_TRANSLATE 1019
|
||||
#define GEO_NODE_LEGACY_POINT_SCALE 1020
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_SAMPLE_TEXTURE 1021
|
||||
#define GEO_NODE_LEGACY_POINTS_TO_VOLUME 1022
|
||||
#define GEO_NODE_ATTRIBUTE_FILL 1011
|
||||
#define GEO_NODE_ATTRIBUTE_MIX 1012
|
||||
#define GEO_NODE_ATTRIBUTE_COLOR_RAMP 1013
|
||||
#define GEO_NODE_POINT_SEPARATE 1014
|
||||
#define GEO_NODE_ATTRIBUTE_COMPARE 1015
|
||||
#define GEO_NODE_POINT_ROTATE 1016
|
||||
#define GEO_NODE_ATTRIBUTE_VECTOR_MATH 1017
|
||||
#define GEO_NODE_ALIGN_ROTATION_TO_VECTOR 1018
|
||||
#define GEO_NODE_POINT_TRANSLATE 1019
|
||||
#define GEO_NODE_POINT_SCALE 1020
|
||||
#define GEO_NODE_ATTRIBUTE_SAMPLE_TEXTURE 1021
|
||||
#define GEO_NODE_POINTS_TO_VOLUME 1022
|
||||
#define GEO_NODE_COLLECTION_INFO 1023
|
||||
#define GEO_NODE_IS_VIEWPORT 1024
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_PROXIMITY 1025
|
||||
#define GEO_NODE_ATTRIBUTE_PROXIMITY 1025
|
||||
#define GEO_NODE_VOLUME_TO_MESH 1026
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_COMBINE_XYZ 1027
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_SEPARATE_XYZ 1028
|
||||
#define GEO_NODE_ATTRIBUTE_COMBINE_XYZ 1027
|
||||
#define GEO_NODE_ATTRIBUTE_SEPARATE_XYZ 1028
|
||||
#define GEO_NODE_MESH_SUBDIVIDE 1029
|
||||
#define GEO_NODE_ATTRIBUTE_REMOVE 1030
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_CONVERT 1031
|
||||
#define GEO_NODE_ATTRIBUTE_CONVERT 1031
|
||||
#define GEO_NODE_MESH_PRIMITIVE_CUBE 1032
|
||||
#define GEO_NODE_MESH_PRIMITIVE_CIRCLE 1033
|
||||
#define GEO_NODE_MESH_PRIMITIVE_UV_SPHERE 1034
|
||||
@@ -1450,28 +1448,28 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
|
||||
#define GEO_NODE_MESH_PRIMITIVE_CONE 1037
|
||||
#define GEO_NODE_MESH_PRIMITIVE_LINE 1038
|
||||
#define GEO_NODE_MESH_PRIMITIVE_GRID 1039
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_MAP_RANGE 1040
|
||||
#define GEO_NODE_LECAGY_ATTRIBUTE_CLAMP 1041
|
||||
#define GEO_NODE_ATTRIBUTE_MAP_RANGE 1040
|
||||
#define GEO_NODE_ATTRIBUTE_CLAMP 1041
|
||||
#define GEO_NODE_BOUNDING_BOX 1042
|
||||
#define GEO_NODE_SWITCH 1043
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_TRANSFER 1044
|
||||
#define GEO_NODE_ATTRIBUTE_TRANSFER 1044
|
||||
#define GEO_NODE_CURVE_TO_MESH 1045
|
||||
#define GEO_NODE_LEGACY_ATTRIBUTE_CURVE_MAP 1046
|
||||
#define GEO_NODE_ATTRIBUTE_CURVE_MAP 1046
|
||||
#define GEO_NODE_CURVE_RESAMPLE 1047
|
||||
#define GEO_NODE_ATTRIBUTE_VECTOR_ROTATE 1048
|
||||
#define GEO_NODE_LEGACY_MATERIAL_ASSIGN 1049
|
||||
#define GEO_NODE_MATERIAL_ASSIGN 1049
|
||||
#define GEO_NODE_INPUT_MATERIAL 1050
|
||||
#define GEO_NODE_MATERIAL_REPLACE 1051
|
||||
#define GEO_NODE_LEGACY_MESH_TO_CURVE 1052
|
||||
#define GEO_NODE_LEGACY_DELETE_GEOMETRY 1053
|
||||
#define GEO_NODE_MESH_TO_CURVE 1052
|
||||
#define GEO_NODE_DELETE_GEOMETRY 1053
|
||||
#define GEO_NODE_CURVE_LENGTH 1054
|
||||
#define GEO_NODE_LEGACY_SELECT_BY_MATERIAL 1055
|
||||
#define GEO_NODE_SELECT_BY_MATERIAL 1055
|
||||
#define GEO_NODE_CONVEX_HULL 1056
|
||||
#define GEO_NODE_CURVE_TO_POINTS 1057
|
||||
#define GEO_NODE_LEGACY_CURVE_REVERSE 1058
|
||||
#define GEO_NODE_CURVE_REVERSE 1058
|
||||
#define GEO_NODE_SEPARATE_COMPONENTS 1059
|
||||
#define GEO_NODE_LEGACY_CURVE_SUBDIVIDE 1060
|
||||
#define GEO_NODE_LEGACY_RAYCAST 1061
|
||||
#define GEO_NODE_CURVE_SUBDIVIDE 1060
|
||||
#define GEO_NODE_RAYCAST 1061
|
||||
#define GEO_NODE_CURVE_PRIMITIVE_STAR 1062
|
||||
#define GEO_NODE_CURVE_PRIMITIVE_SPIRAL 1063
|
||||
#define GEO_NODE_CURVE_PRIMITIVE_QUADRATIC_BEZIER 1064
|
||||
@@ -1482,17 +1480,15 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
|
||||
#define GEO_NODE_CURVE_ENDPOINTS 1069
|
||||
#define GEO_NODE_CURVE_PRIMITIVE_QUADRILATERAL 1070
|
||||
#define GEO_NODE_CURVE_TRIM 1071
|
||||
#define GEO_NODE_LEGACY_CURVE_SET_HANDLES 1072
|
||||
#define GEO_NODE_LEGACY_CURVE_SPLINE_TYPE 1073
|
||||
#define GEO_NODE_LEGACY_CURVE_SELECT_HANDLES 1074
|
||||
#define GEO_NODE_CURVE_SET_HANDLES 1072
|
||||
#define GEO_NODE_CURVE_SPLINE_TYPE 1073
|
||||
#define GEO_NODE_CURVE_SELECT_HANDLES 1074
|
||||
#define GEO_NODE_CURVE_FILL 1075
|
||||
#define GEO_NODE_INPUT_POSITION 1076
|
||||
#define GEO_NODE_SET_POSITION 1077
|
||||
#define GEO_NODE_INPUT_INDEX 1078
|
||||
#define GEO_NODE_INPUT_NORMAL 1079
|
||||
#define GEO_NODE_ATTRIBUTE_CAPTURE 1080
|
||||
#define GEO_NODE_MATERIAL_SELECTION 1081
|
||||
#define GEO_NODE_MATERIAL_ASSIGN 1082
|
||||
|
||||
/** \} */
|
||||
|
||||
|
@@ -25,8 +25,6 @@
|
||||
#include "BLI_sys_types.h"
|
||||
|
||||
#include "DNA_object_enums.h"
|
||||
#include "DNA_userdef_types.h"
|
||||
#include "BKE_lib_id.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -156,8 +154,8 @@ bool BKE_object_obdata_is_libdata(const struct Object *ob);
|
||||
|
||||
struct Object *BKE_object_duplicate(struct Main *bmain,
|
||||
struct Object *ob,
|
||||
eDupli_ID_Flags dupflag,
|
||||
const eLibIDDuplicateFlags duplicate_options);
|
||||
uint dupflag,
|
||||
const uint duplicate_options);
|
||||
|
||||
void BKE_object_obdata_size_init(struct Object *ob, const float size);
|
||||
|
||||
|
@@ -74,12 +74,6 @@ char *BKE_packedfile_unpack_to_file(struct ReportList *reports,
|
||||
const char *local_name,
|
||||
struct PackedFile *pf,
|
||||
enum ePF_FileStatus how);
|
||||
char *BKE_packedfile_unpack(struct Main *bmain,
|
||||
struct ReportList *reports,
|
||||
struct ID *id,
|
||||
const char *orig_file_path,
|
||||
struct PackedFile *pf,
|
||||
enum ePF_FileStatus how);
|
||||
int BKE_packedfile_unpack_vfont(struct Main *bmain,
|
||||
struct ReportList *reports,
|
||||
struct VFont *vfont,
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user