@tushar-br/editing-pack 1.0.188 → 1.0.190
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/staging_area/Blender/blender.pdb.ts_part_0 +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/__init__.py +0 -173
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/__pycache__/camera.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/__pycache__/engine.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/__pycache__/operators.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/__pycache__/presets.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/__pycache__/properties.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/__pycache__/ui.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/__pycache__/version_update.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/geom/shader_data.h +0 -452
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/geom/triangle.h +0 -278
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/geom/triangle_intersect.h +0 -166
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/geom/volume.h +0 -104
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/globals.h +0 -13
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/image.h +0 -12
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/displacement_shader.h +0 -43
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/guiding.h +0 -641
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/init_from_bake.h +0 -344
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/init_from_camera.h +0 -110
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/intersect_closest.h +0 -443
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/intersect_dedicated_light.h +0 -232
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/intersect_shadow.h +0 -183
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/intersect_subsurface.h +0 -24
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/intersect_volume_stack.h +0 -250
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/megakernel.h +0 -114
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/mnee.h +0 -1123
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/path_state.h +0 -425
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/shade_background.h +0 -210
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/shade_dedicated_light.h +0 -243
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/shade_light.h +0 -95
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/shade_shadow.h +0 -192
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/shade_surface.h +0 -885
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/shade_volume.h +0 -2947
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/shadow_catcher.h +0 -79
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/shadow_linking.h +0 -69
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/shadow_state_template.h +0 -99
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/state.h +0 -276
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/state_flow.h +0 -255
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/state_template.h +0 -152
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/state_util.h +0 -602
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/subsurface.h +0 -251
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/subsurface_disk.h +0 -220
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/subsurface_random_walk.h +0 -462
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/surface_shader.h +0 -1198
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/volume_shader.h +0 -539
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/integrator/volume_stack.h +0 -258
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/light/area.h +0 -537
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/light/background.h +0 -500
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/light/common.h +0 -86
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/light/distant.h +0 -167
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/light/distribution.h +0 -60
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/light/light.h +0 -499
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/light/point.h +0 -240
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/light/sample.h +0 -545
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/light/spot.h +0 -347
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/light/tree.h +0 -951
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/light/triangle.h +0 -339
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/osl/camera.h +0 -81
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/osl/closures_setup.h +0 -1259
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/osl/closures_template.h +0 -277
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/osl/osl.h +0 -287
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/osl/services_gpu.h +0 -1327
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/osl/types.h +0 -157
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/sample/lcg.h +0 -53
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/sample/mapping.h +0 -251
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/sample/mis.h +0 -41
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/sample/pattern.h +0 -188
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/sample/sobol_burley.h +0 -203
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/sample/tabulated_sobol.h +0 -178
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/sample/util.h +0 -79
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/ao.h +0 -148
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/aov.h +0 -49
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/attribute.h +0 -326
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/bevel.h +0 -334
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/blackbody.h +0 -35
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/brick.h +0 -147
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/brightness.h +0 -32
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/bump.h +0 -72
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/camera.h +0 -42
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/checker.h +0 -54
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/clamp.h +0 -40
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/closure.h +0 -1559
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/color_util.h +0 -409
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/convert.h +0 -66
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/displace.h +0 -240
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/fractal_noise.h +0 -550
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/fresnel.h +0 -80
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/gabor.h +0 -392
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/gamma.h +0 -27
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/geometry.h +0 -280
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/gradient.h +0 -80
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/hsv.h +0 -54
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/ies.h +0 -38
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/image.h +0 -273
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/invert.h +0 -33
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/light_path.h +0 -150
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/magic.h +0 -132
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/map_range.h +0 -164
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/mapping.h +0 -74
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/mapping_util.h +0 -37
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/math.h +0 -73
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/math_util.h +0 -278
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/mix.h +0 -125
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/node_types_template.h +0 -115
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/noise.h +0 -761
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/noisetex.h +0 -370
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/normal.h +0 -38
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/radial_tiling.h +0 -81
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/radial_tiling_shared.h +0 -1179
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/ramp.h +0 -185
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/ramp_util.h +0 -80
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/sepcomb_color.h +0 -62
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/sepcomb_vector.h +0 -45
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/sky.h +0 -309
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/svm.h +0 -492
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/tex_coord.h +0 -506
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/types.h +0 -530
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/util.h +0 -160
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/value.h +0 -34
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/vector_rotate.h +0 -79
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/vector_transform.h +0 -130
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/vertex_color.h +0 -107
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/voronoi.h +0 -1248
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/wave.h +0 -137
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/wavelength.h +0 -36
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/white_noise.h +0 -74
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/svm/wireframe.h +0 -116
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/tables.h +0 -124
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/types.h +0 -1923
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/util/colorspace.h +0 -54
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/util/differential.h +0 -169
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/util/ies.h +0 -145
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/util/lookup_table.h +0 -74
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/util/nanovdb.h +0 -436
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/util/profiler.h +0 -28
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/kernel/util/texture_3d.h +0 -232
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/atomic.h +0 -315
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/color.h +0 -439
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/defines.h +0 -131
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/guiding.h +0 -40
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/half.h +0 -178
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/hash.h +0 -650
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/math.h +0 -24
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/math_base.h +0 -953
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/math_dual.h +0 -59
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/math_fast.h +0 -650
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/math_float2.h +0 -274
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/math_float3.h +0 -847
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/math_float4.h +0 -666
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/math_float8.h +0 -471
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/math_int2.h +0 -59
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/math_int3.h +0 -117
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/math_int4.h +0 -296
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/math_int8.h +0 -353
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/math_intersect.h +0 -452
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/projection.h +0 -308
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/projection_inverse.h +0 -95
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/rect.h +0 -61
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/static_assert.h +0 -21
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/texture.h +0 -100
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/transform.h +0 -650
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types.h +0 -32
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_base.h +0 -94
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_dual.h +0 -134
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_float2.h +0 -71
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_float3.h +0 -200
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_float4.h +0 -134
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_float8.h +0 -134
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_int2.h +0 -44
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_int3.h +0 -158
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_int4.h +0 -91
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_int8.h +0 -94
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_rgbe.h +0 -109
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_spectrum.h +0 -28
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_uchar2.h +0 -39
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_uchar3.h +0 -39
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_uchar4.h +0 -45
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_uint2.h +0 -37
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_uint3.h +0 -91
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_uint4.h +0 -37
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/source/util/types_ushort4.h +0 -19
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/ui.py +0 -2645
- package/staging_area/Blender/5.0/scripts/addons_core/cycles/version_update.py +0 -330
- package/staging_area/Blender/5.0/scripts/addons_core/hydra_storm/__init__.py +0 -33
- package/staging_area/Blender/5.0/scripts/addons_core/hydra_storm/engine.py +0 -47
- package/staging_area/Blender/5.0/scripts/addons_core/hydra_storm/properties.py +0 -62
- package/staging_area/Blender/5.0/scripts/addons_core/hydra_storm/ui.py +0 -280
- package/staging_area/Blender/5.0/scripts/addons_core/io_anim_bvh/__init__.py +0 -397
- package/staging_area/Blender/5.0/scripts/addons_core/io_anim_bvh/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_anim_bvh/export_bvh.py +0 -294
- package/staging_area/Blender/5.0/scripts/addons_core/io_anim_bvh/import_bvh.py +0 -795
- package/staging_area/Blender/5.0/scripts/addons_core/io_curve_svg/__init__.py +0 -115
- package/staging_area/Blender/5.0/scripts/addons_core/io_curve_svg/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_curve_svg/import_svg.py +0 -1911
- package/staging_area/Blender/5.0/scripts/addons_core/io_curve_svg/svg_colors.py +0 -153
- package/staging_area/Blender/5.0/scripts/addons_core/io_curve_svg/svg_util.py +0 -107
- package/staging_area/Blender/5.0/scripts/addons_core/io_curve_svg/svg_util_test.py +0 -166
- package/staging_area/Blender/5.0/scripts/addons_core/io_mesh_uv_layout/__init__.py +0 -302
- package/staging_area/Blender/5.0/scripts/addons_core/io_mesh_uv_layout/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_mesh_uv_layout/export_uv_eps.py +0 -82
- package/staging_area/Blender/5.0/scripts/addons_core/io_mesh_uv_layout/export_uv_png.py +0 -119
- package/staging_area/Blender/5.0/scripts/addons_core/io_mesh_uv_layout/export_uv_svg.py +0 -54
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_fbx/__init__.py +0 -740
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_fbx/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_fbx/data_types.py +0 -62
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_fbx/encode_bin.py +0 -434
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_fbx/export_fbx_bin.py +0 -3819
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_fbx/fbx2json.py +0 -341
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_fbx/fbx_utils.py +0 -1931
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_fbx/fbx_utils_threading.py +0 -194
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_fbx/import_fbx.py +0 -4045
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_fbx/json2fbx.py +0 -165
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_fbx/parse_fbx.py +0 -274
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/__init__.py +0 -2250
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/__init__.py +0 -3
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/__pycache__/blender_default.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/__pycache__/conversion.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/__pycache__/data_path.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/__pycache__/extras.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/__pycache__/gltf2_blender_math.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/__pycache__/gltf2_blender_ui.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/__pycache__/gltf2_blender_utils.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/__pycache__/json_util.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/__pycache__/material_helpers.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/blender_default.py +0 -15
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/conversion.py +0 -229
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/data_path.py +0 -110
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/extras.py +0 -89
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/gltf2_blender_math.py +0 -209
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/gltf2_blender_ui.py +0 -751
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/gltf2_blender_utils.py +0 -70
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/json_util.py +0 -27
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/com/material_helpers.py +0 -32
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/__pycache__/cache.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/__pycache__/sampler.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/accessors.py +0 -189
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/action.py +0 -1062
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/anim_utils.py +0 -321
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/animations.py +0 -22
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/drivers.py +0 -83
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/fcurves/animation.py +0 -35
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/fcurves/channel_target.py +0 -53
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/fcurves/channels.py +0 -378
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/fcurves/keyframes.py +0 -207
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/fcurves/sampler.py +0 -231
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/keyframes.py +0 -127
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/action_sampled.py +0 -55
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/channel_target.py +0 -54
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/channels.py +0 -236
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/keyframes.py +0 -95
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/sampler.py +0 -230
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/channel_target.py +0 -48
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/channels.py +0 -118
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/keyframes.py +0 -152
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/sampler.py +0 -135
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/action_sampled.py +0 -58
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/channel_target.py +0 -51
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/channels.py +0 -136
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/keyframes.py +0 -88
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/sampler.py +0 -171
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/sampling_cache.py +0 -754
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/action_sampled.py +0 -43
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/channel_target.py +0 -38
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/channels.py +0 -79
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/keyframes.py +0 -145
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/sampler.py +0 -111
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/scene_animation.py +0 -244
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/animation/tracks.py +0 -846
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/cache.py +0 -182
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/cameras.py +0 -152
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/export.py +0 -412
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/exporter.py +0 -536
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/gather.py +0 -157
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/joints.py +0 -110
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/light_spots.py +0 -47
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/lights.py +0 -212
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/__pycache__/encode_image.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/__pycache__/image.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/__pycache__/search_node_tree.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/__pycache__/texture.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/__pycache__/texture_info.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/__pycache__/unlit.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/encode_image.py +0 -491
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/extensions/anisotropy.py +0 -259
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/extensions/clearcoat.py +0 -156
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/extensions/emission.py +0 -115
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/extensions/ior.py +0 -45
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/extensions/sheen.py +0 -129
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/extensions/specular.py +0 -140
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/extensions/transmission.py +0 -76
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/extensions/variants.py +0 -19
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/extensions/volume.py +0 -118
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/image.py +0 -514
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/material_utils.py +0 -13
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/material_viewport.py +0 -32
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/materials.py +0 -714
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/pbr_metallic_roughness.py +0 -257
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/search_node_tree.py +0 -1120
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/texture.py +0 -248
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/texture_info.py +0 -291
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/material/unlit.py +0 -191
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/mesh.py +0 -160
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/nodes.py +0 -577
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/primitive_attributes.py +0 -252
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/primitive_extract.py +0 -1662
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/primitives.py +0 -366
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/sampler.py +0 -187
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/skins.py +0 -148
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/exp/tree.py +0 -976
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/KHR_materials_anisotropy.py +0 -116
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/KHR_materials_pbrSpecularGlossiness.py +0 -203
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/KHR_materials_unlit.py +0 -56
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/KHR_materials_anisotropy.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/KHR_materials_pbrSpecularGlossiness.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/KHR_materials_unlit.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/animation.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/animation_node.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/animation_pointer.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/animation_utils.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/animation_weight.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/blender_gltf.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/camera.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/draco_compression_extension.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/image.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/light.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/material.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/material_utils.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/mesh.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/node.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/pbrMetallicRoughness.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/scene.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/texture.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/__pycache__/vnode.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/animation.py +0 -170
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/animation_node.py +0 -170
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/animation_pointer.py +0 -787
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/animation_utils.py +0 -174
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/animation_weight.py +0 -95
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/blender_gltf.py +0 -633
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/camera.py +0 -75
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/draco_compression_extension.py +0 -138
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/image.py +0 -102
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/light.py +0 -143
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/material.py +0 -113
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/material_utils.py +0 -196
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/mesh.py +0 -920
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/node.py +0 -348
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/pbrMetallicRoughness.py +0 -903
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/scene.py +0 -133
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/texture.py +0 -233
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/blender/imp/vnode.py +0 -661
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/extern_draco.dll +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/__init__.py +0 -5
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/com/__pycache__/constants.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/com/__pycache__/debug.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/com/__pycache__/draco.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/com/__pycache__/gltf2_io.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/com/__pycache__/gltf2_io_extensions.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/com/__pycache__/path.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/com/constants.py +0 -159
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/com/debug.py +0 -129
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/com/draco.py +0 -46
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/com/gltf2_io.py +0 -1217
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/com/gltf2_io_extensions.py +0 -30
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/com/lights_punctual.py +0 -68
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/com/path.py +0 -19
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/com/variants.py +0 -32
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/exp/__pycache__/binary_data.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/exp/__pycache__/image_data.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/exp/__pycache__/user_extensions.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/exp/binary_data.py +0 -35
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/exp/buffer.py +0 -54
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/exp/draco.py +0 -174
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/exp/export.py +0 -122
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/exp/image_data.py +0 -80
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/exp/user_extensions.py +0 -17
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/imp/__init__.py +0 -5
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/imp/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/imp/__pycache__/gltf2_io_binary.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/imp/__pycache__/gltf2_io_gltf.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/imp/__pycache__/user_extensions.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/imp/gltf2_io_binary.py +0 -215
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/imp/gltf2_io_gltf.py +0 -198
- package/staging_area/Blender/5.0/scripts/addons_core/io_scene_gltf2/io/imp/user_extensions.py +0 -13
- package/staging_area/Blender/5.0/scripts/addons_core/node_wrangler/README.md +0 -5
- package/staging_area/Blender/5.0/scripts/addons_core/node_wrangler/__init__.py +0 -64
- package/staging_area/Blender/5.0/scripts/addons_core/node_wrangler/interface.py +0 -526
- package/staging_area/Blender/5.0/scripts/addons_core/node_wrangler/operators.py +0 -2421
- package/staging_area/Blender/5.0/scripts/addons_core/node_wrangler/preferences.py +0 -398
- package/staging_area/Blender/5.0/scripts/addons_core/node_wrangler/utils/constants.py +0 -192
- package/staging_area/Blender/5.0/scripts/addons_core/node_wrangler/utils/draw.py +0 -219
- package/staging_area/Blender/5.0/scripts/addons_core/node_wrangler/utils/nodes.py +0 -299
- package/staging_area/Blender/5.0/scripts/addons_core/node_wrangler/utils/paths.py +0 -169
- package/staging_area/Blender/5.0/scripts/addons_core/node_wrangler/utils/paths_test.py +0 -290
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/__init__.py +0 -56
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/__pycache__/asset_browser.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/__pycache__/functions.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/__pycache__/gui.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/__pycache__/keymaps.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/__pycache__/operators.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/__pycache__/pose_creation.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/__pycache__/pose_usage.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/asset_browser.py +0 -99
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/functions.py +0 -57
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/gui.py +0 -229
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/keymaps.py +0 -29
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/operators.py +0 -299
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/pose_creation.py +0 -413
- package/staging_area/Blender/5.0/scripts/addons_core/pose_library/pose_usage.py +0 -85
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/__init__.py +0 -907
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/base_generate.py +0 -536
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/base_rig.py +0 -351
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/feature_set_list.py +0 -357
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/feature_sets/__init__.py +0 -16
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/generate.py +0 -762
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/metarig_menu.py +0 -271
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/metarigs/Animals/__init__.py +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/metarigs/Animals/bird.py +0 -1397
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/metarigs/Animals/cat.py +0 -2854
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/metarigs/Animals/horse.py +0 -1401
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/metarigs/Animals/shark.py +0 -692
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/metarigs/Animals/wolf.py +0 -3088
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/metarigs/Basic/basic_human.py +0 -618
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/metarigs/Basic/basic_quadruped.py +0 -715
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/metarigs/__init__.py +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/metarigs/human.py +0 -2625
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/operators/__init__.py +0 -34
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/operators/action_layers.py +0 -658
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/operators/copy_mirror_parameters.py +0 -316
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/operators/generic_ui_list.py +0 -191
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/operators/upgrade_face.py +0 -457
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rig_lists.py +0 -116
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rig_ui_template.py +0 -1445
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/__init__.py +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/basic/__init__.py +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/basic/copy_chain.py +0 -167
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/basic/pivot.py +0 -242
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/basic/raw_copy.py +0 -228
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/basic/super_copy.py +0 -191
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/chain_rigs.py +0 -388
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/experimental/__init__.py +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/experimental/super_chain.py +0 -853
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/face/basic_tongue.py +0 -195
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/face/skin_eye.py +0 -843
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/face/skin_jaw.py +0 -880
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/faces/__init__.py +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/faces/super_face.py +0 -2378
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/limbs/__init__.py +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/limbs/arm.py +0 -209
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/limbs/front_paw.py +0 -270
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/limbs/leg.py +0 -746
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/limbs/limb_rigs.py +0 -1287
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/limbs/limb_utils.py +0 -78
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/limbs/paw.py +0 -360
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/limbs/rear_paw.py +0 -172
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/limbs/simple_tentacle.py +0 -169
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/limbs/spline_tentacle.py +0 -1486
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/limbs/super_finger.py +0 -699
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/limbs/super_limb.py +0 -46
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/limbs/super_palm.py +0 -426
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/skin/anchor.py +0 -142
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/skin/basic_chain.py +0 -565
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/skin/glue.py +0 -325
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/skin/skin_nodes.py +0 -604
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/skin/skin_parents.py +0 -505
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/skin/skin_rigs.py +0 -250
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/skin/stretchy_chain.py +0 -422
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/skin/transform/basic.py +0 -141
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/spines/__init__.py +0 -0
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/spines/basic_spine.py +0 -387
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/spines/basic_tail.py +0 -242
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/spines/spine_rigs.py +0 -295
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/spines/super_head.py +0 -424
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/spines/super_spine.py +0 -150
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/utils.py +0 -175
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rigs/widgets.py +0 -483
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/rot_mode.py +0 -311
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/ui.py +0 -1834
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/__init__.py +0 -40
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/action_layers.py +0 -454
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/animation.py +0 -1024
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/bones.py +0 -742
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/collections.py +0 -83
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/components.py +0 -102
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/errors.py +0 -28
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/layers.py +0 -396
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/mechanism.py +0 -669
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/metaclass.py +0 -170
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/misc.py +0 -533
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/naming.py +0 -366
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/node_merger.py +0 -345
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/objects.py +0 -206
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/rig.py +0 -747
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/switch_parent.py +0 -533
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/widgets.py +0 -531
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/widgets_basic.py +0 -305
- package/staging_area/Blender/5.0/scripts/addons_core/rigify/utils/widgets_special.py +0 -226
- package/staging_area/Blender/5.0/scripts/addons_core/ui_translate/__init__.py +0 -60
- package/staging_area/Blender/5.0/scripts/addons_core/ui_translate/settings.py +0 -194
- package/staging_area/Blender/5.0/scripts/addons_core/ui_translate/update_addon.py +0 -378
- package/staging_area/Blender/5.0/scripts/addons_core/ui_translate/update_repo.py +0 -248
- package/staging_area/Blender/5.0/scripts/addons_core/ui_translate/update_ui.py +0 -267
- package/staging_area/Blender/5.0/scripts/addons_core/viewport_vr_preview/__init__.py +0 -55
- package/staging_area/Blender/5.0/scripts/addons_core/viewport_vr_preview/action_map.py +0 -177
- package/staging_area/Blender/5.0/scripts/addons_core/viewport_vr_preview/action_map_io.py +0 -346
- package/staging_area/Blender/5.0/scripts/addons_core/viewport_vr_preview/configs/default.py +0 -434
- package/staging_area/Blender/5.0/scripts/addons_core/viewport_vr_preview/defaults.py +0 -1587
- package/staging_area/Blender/5.0/scripts/addons_core/viewport_vr_preview/gui.py +0 -295
- package/staging_area/Blender/5.0/scripts/addons_core/viewport_vr_preview/operators.py +0 -540
- package/staging_area/Blender/5.0/scripts/addons_core/viewport_vr_preview/preferences.py +0 -67
- package/staging_area/Blender/5.0/scripts/addons_core/viewport_vr_preview/properties.py +0 -228
- package/staging_area/Blender/5.0/scripts/addons_core/viewport_vr_preview/versioning.py +0 -38
- package/staging_area/Blender/5.0/scripts/freestyle/modules/freestyle/__init__.py +0 -14
- package/staging_area/Blender/5.0/scripts/freestyle/modules/freestyle/chainingiterators.py +0 -644
- package/staging_area/Blender/5.0/scripts/freestyle/modules/freestyle/functions.py +0 -313
- package/staging_area/Blender/5.0/scripts/freestyle/modules/freestyle/predicates.py +0 -670
- package/staging_area/Blender/5.0/scripts/freestyle/modules/freestyle/shaders.py +0 -1248
- package/staging_area/Blender/5.0/scripts/freestyle/modules/freestyle/types.py +0 -159
- package/staging_area/Blender/5.0/scripts/freestyle/modules/freestyle/utils.py +0 -541
- package/staging_area/Blender/5.0/scripts/freestyle/modules/parameter_editor.py +0 -1589
- package/staging_area/Blender/5.0/scripts/freestyle/styles/anisotropic_diffusion.py +0 -41
- package/staging_area/Blender/5.0/scripts/freestyle/styles/apriori_and_causal_density.py +0 -34
- package/staging_area/Blender/5.0/scripts/freestyle/styles/apriori_density.py +0 -33
- package/staging_area/Blender/5.0/scripts/freestyle/styles/backbone_stretcher.py +0 -28
- package/staging_area/Blender/5.0/scripts/freestyle/styles/blueprint_circles.py +0 -39
- package/staging_area/Blender/5.0/scripts/freestyle/styles/blueprint_ellipses.py +0 -39
- package/staging_area/Blender/5.0/scripts/freestyle/styles/blueprint_squares.py +0 -40
- package/staging_area/Blender/5.0/scripts/freestyle/styles/cartoon.py +0 -32
- package/staging_area/Blender/5.0/scripts/freestyle/styles/contour.py +0 -33
- package/staging_area/Blender/5.0/scripts/freestyle/styles/curvature2d.py +0 -29
- package/staging_area/Blender/5.0/scripts/freestyle/styles/external_contour.py +0 -33
- package/staging_area/Blender/5.0/scripts/freestyle/styles/external_contour_sketchy.py +0 -39
- package/staging_area/Blender/5.0/scripts/freestyle/styles/external_contour_smooth.py +0 -37
- package/staging_area/Blender/5.0/scripts/freestyle/styles/haloing.py +0 -43
- package/staging_area/Blender/5.0/scripts/freestyle/styles/ignore_small_occlusions.py +0 -30
- package/staging_area/Blender/5.0/scripts/freestyle/styles/invisible_lines.py +0 -32
- package/staging_area/Blender/5.0/scripts/freestyle/styles/japanese_bigbrush.py +0 -53
- package/staging_area/Blender/5.0/scripts/freestyle/styles/long_anisotropically_dense.py +0 -67
- package/staging_area/Blender/5.0/scripts/freestyle/styles/multiple_parameterization.py +0 -41
- package/staging_area/Blender/5.0/scripts/freestyle/styles/nature.py +0 -32
- package/staging_area/Blender/5.0/scripts/freestyle/styles/near_lines.py +0 -32
- package/staging_area/Blender/5.0/scripts/freestyle/styles/occluded_by_specific_object.py +0 -36
- package/staging_area/Blender/5.0/scripts/freestyle/styles/polygonalize.py +0 -32
- package/staging_area/Blender/5.0/scripts/freestyle/styles/qi0.py +0 -31
- package/staging_area/Blender/5.0/scripts/freestyle/styles/qi0_not_external_contour.py +0 -38
- package/staging_area/Blender/5.0/scripts/freestyle/styles/qi1.py +0 -32
- package/staging_area/Blender/5.0/scripts/freestyle/styles/qi2.py +0 -32
- package/staging_area/Blender/5.0/scripts/freestyle/styles/sequentialsplit_sketchy.py +0 -39
- package/staging_area/Blender/5.0/scripts/freestyle/styles/sketchy_multiple_parameterization.py +0 -37
- package/staging_area/Blender/5.0/scripts/freestyle/styles/sketchy_topology_broken.py +0 -39
- package/staging_area/Blender/5.0/scripts/freestyle/styles/sketchy_topology_preserved.py +0 -36
- package/staging_area/Blender/5.0/scripts/freestyle/styles/split_at_highest_2d_curvatures.py +0 -34
- package/staging_area/Blender/5.0/scripts/freestyle/styles/split_at_tvertices.py +0 -33
- package/staging_area/Blender/5.0/scripts/freestyle/styles/suggestive.py +0 -33
- package/staging_area/Blender/5.0/scripts/freestyle/styles/thickness_fof_depth_discontinuity.py +0 -32
- package/staging_area/Blender/5.0/scripts/freestyle/styles/tipremover.py +0 -32
- package/staging_area/Blender/5.0/scripts/freestyle/styles/tvertex_remover.py +0 -32
- package/staging_area/Blender/5.0/scripts/freestyle/styles/uniformpruning_zsort.py +0 -31
- package/staging_area/Blender/5.0/scripts/modules/__pycache__/_bpy_restrict_state.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/__pycache__/_bpy_types.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/__pycache__/_console_python.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/__pycache__/_keyingsets_utils.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/__pycache__/_rna_xml.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/__pycache__/addon_utils.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/__pycache__/bl_app_template_utils.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/__pycache__/nodeitems_utils.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/__pycache__/rna_keymap_ui.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/__pycache__/rna_prop_ui.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/_animsys_refactor.py +0 -230
- package/staging_area/Blender/5.0/scripts/modules/_bl_console_utils/__init__.py +0 -7
- package/staging_area/Blender/5.0/scripts/modules/_bl_console_utils/autocomplete/__init__.py +0 -7
- package/staging_area/Blender/5.0/scripts/modules/_bl_console_utils/autocomplete/complete_calltip.py +0 -174
- package/staging_area/Blender/5.0/scripts/modules/_bl_console_utils/autocomplete/complete_import.py +0 -180
- package/staging_area/Blender/5.0/scripts/modules/_bl_console_utils/autocomplete/complete_namespace.py +0 -192
- package/staging_area/Blender/5.0/scripts/modules/_bl_console_utils/autocomplete/intellisense.py +0 -138
- package/staging_area/Blender/5.0/scripts/modules/_bl_i18n_utils/__init__.py +0 -5
- package/staging_area/Blender/5.0/scripts/modules/_bl_i18n_utils/bl_extract_messages.py +0 -1363
- package/staging_area/Blender/5.0/scripts/modules/_bl_i18n_utils/merge_po.py +0 -132
- package/staging_area/Blender/5.0/scripts/modules/_bl_i18n_utils/settings.py +0 -824
- package/staging_area/Blender/5.0/scripts/modules/_bl_i18n_utils/settings_user.py +0 -7
- package/staging_area/Blender/5.0/scripts/modules/_bl_i18n_utils/utils.py +0 -1709
- package/staging_area/Blender/5.0/scripts/modules/_bl_i18n_utils/utils_cli.py +0 -144
- package/staging_area/Blender/5.0/scripts/modules/_bl_i18n_utils/utils_languages_menu.py +0 -68
- package/staging_area/Blender/5.0/scripts/modules/_bl_i18n_utils/utils_rtl.py +0 -179
- package/staging_area/Blender/5.0/scripts/modules/_bl_i18n_utils/utils_spell_check.py +0 -955
- package/staging_area/Blender/5.0/scripts/modules/_bl_previews_utils/bl_previews_render.py +0 -537
- package/staging_area/Blender/5.0/scripts/modules/_bl_rna_utils/__init__.py +0 -0
- package/staging_area/Blender/5.0/scripts/modules/_bl_rna_utils/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/_bl_rna_utils/__pycache__/data_path.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/_bl_rna_utils/data_path.py +0 -76
- package/staging_area/Blender/5.0/scripts/modules/_bl_text_utils/__init__.py +0 -0
- package/staging_area/Blender/5.0/scripts/modules/_bl_text_utils/external_editor.py +0 -54
- package/staging_area/Blender/5.0/scripts/modules/_bl_ui_utils/__init__.py +0 -0
- package/staging_area/Blender/5.0/scripts/modules/_bl_ui_utils/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/_bl_ui_utils/__pycache__/layout.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/_bl_ui_utils/layout.py +0 -21
- package/staging_area/Blender/5.0/scripts/modules/_blendfile_header.py +0 -234
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/__init__.py +0 -3
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/addons/__init__.py +0 -3
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/addons/cli.py +0 -42
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/assets/__init__.py +0 -3
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/assets/remote_library_listing/__init__.py +0 -3
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/assets/remote_library_listing/blender_asset_library_openapi.py +0 -98
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/assets/remote_library_listing/blender_asset_library_openapi.yaml +0 -83
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/extensions/__init__.py +0 -3
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/extensions/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/extensions/__pycache__/junction_module.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/extensions/__pycache__/wheel_manager.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/extensions/junction_module.py +0 -165
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/extensions/permissions.py +0 -16
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/extensions/stale_file_manager.py +0 -417
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/extensions/tags.py +0 -54
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/extensions/wheel_manager.py +0 -686
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/freedesktop.py +0 -598
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/grease_pencil/__init__.py +0 -3
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/grease_pencil/stroke.py +0 -402
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/http/__init__.py +0 -3
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/http/downloader.py +0 -1348
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/system_info/text_generate_runtime.py +0 -256
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/system_info/url_prefill_runtime.py +0 -60
- package/staging_area/Blender/5.0/scripts/modules/_bpy_internal/system_info/url_prefill_startup.py +0 -107
- package/staging_area/Blender/5.0/scripts/modules/_bpy_restrict_state.py +0 -50
- package/staging_area/Blender/5.0/scripts/modules/_bpy_types.py +0 -1563
- package/staging_area/Blender/5.0/scripts/modules/_console_python.py +0 -368
- package/staging_area/Blender/5.0/scripts/modules/_console_shell.py +0 -73
- package/staging_area/Blender/5.0/scripts/modules/_graphviz_export.py +0 -194
- package/staging_area/Blender/5.0/scripts/modules/_keyingsets_utils.py +0 -355
- package/staging_area/Blender/5.0/scripts/modules/_rna_info.py +0 -984
- package/staging_area/Blender/5.0/scripts/modules/_rna_manual_reference.py +0 -4446
- package/staging_area/Blender/5.0/scripts/modules/_rna_xml.py +0 -422
- package/staging_area/Blender/5.0/scripts/modules/addon_utils.py +0 -1992
- package/staging_area/Blender/5.0/scripts/modules/bl_app_override/__init__.py +0 -211
- package/staging_area/Blender/5.0/scripts/modules/bl_app_override/helpers.py +0 -153
- package/staging_area/Blender/5.0/scripts/modules/bl_app_template_utils.py +0 -177
- package/staging_area/Blender/5.0/scripts/modules/bl_keymap_utils/__init__.py +0 -9
- package/staging_area/Blender/5.0/scripts/modules/bl_keymap_utils/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/bl_keymap_utils/__pycache__/io.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/bl_keymap_utils/__pycache__/keymap_from_toolbar.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/bl_keymap_utils/__pycache__/keymap_hierarchy.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/bl_keymap_utils/io.py +0 -308
- package/staging_area/Blender/5.0/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py +0 -394
- package/staging_area/Blender/5.0/scripts/modules/bl_keymap_utils/keymap_hierarchy.py +0 -247
- package/staging_area/Blender/5.0/scripts/modules/bl_keymap_utils/platform_helpers.py +0 -55
- package/staging_area/Blender/5.0/scripts/modules/bl_keymap_utils/versioning.py +0 -328
- package/staging_area/Blender/5.0/scripts/modules/blend_render_info.py +0 -123
- package/staging_area/Blender/5.0/scripts/modules/bpy/__init__.py +0 -75
- package/staging_area/Blender/5.0/scripts/modules/bpy/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/bpy/__pycache__/ops.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/bpy/__pycache__/path.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/bpy/ops.py +0 -184
- package/staging_area/Blender/5.0/scripts/modules/bpy/path.py +0 -459
- package/staging_area/Blender/5.0/scripts/modules/bpy/utils/__init__.py +0 -1382
- package/staging_area/Blender/5.0/scripts/modules/bpy/utils/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/bpy/utils/__pycache__/previews.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/bpy/utils/previews.py +0 -136
- package/staging_area/Blender/5.0/scripts/modules/bpy/utils/toolsystem.py +0 -11
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/__init__.py +0 -20
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/__pycache__/asset_utils.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/__pycache__/io_utils.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/__pycache__/node_utils.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/__pycache__/object_utils.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/anim_utils.py +0 -1038
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/asset_utils.py +0 -50
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/bmesh_utils.py +0 -56
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/id_map_utils.py +0 -53
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/image_utils.py +0 -194
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/io_utils.py +0 -620
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/keyconfig_utils.py +0 -141
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/mesh_utils.py +0 -464
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/node_shader_utils.py +0 -829
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/node_utils.py +0 -88
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/object_utils.py +0 -289
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/view3d_utils.py +0 -181
- package/staging_area/Blender/5.0/scripts/modules/bpy_extras/wm_utils/progress_report.py +0 -160
- package/staging_area/Blender/5.0/scripts/modules/gpu_extras/__init__.py +0 -8
- package/staging_area/Blender/5.0/scripts/modules/gpu_extras/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/gpu_extras/__pycache__/presets.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/modules/gpu_extras/batch.py +0 -80
- package/staging_area/Blender/5.0/scripts/modules/gpu_extras/presets.py +0 -102
- package/staging_area/Blender/5.0/scripts/modules/nodeitems_utils.py +0 -178
- package/staging_area/Blender/5.0/scripts/modules/rna_keymap_ui.py +0 -505
- package/staging_area/Blender/5.0/scripts/modules/rna_prop_ui.py +0 -269
- package/staging_area/Blender/5.0/scripts/presets/camera/1_inch.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/1_slash_1.8_inch.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/1_slash_2.3_inch.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/1_slash_2.5_inch.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/1_slash_2.7_inch.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/1_slash_3.2_inch.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/2_slash_3_inch.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/APS-C.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/APS-C_(Canon).py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/APS-H_(Canon).py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Analog_16mm.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Analog_35mm.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Analog_65mm.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Analog_IMAX.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Analog_Super_16.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Analog_Super_35.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Arri_Alexa_65.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Arri_Alexa_LF.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Arri_Alexa_Mini_&_SXT.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Blackmagic_Pocket_&_Studio.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Blackmagic_Pocket_4K.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Blackmagic_Pocket_6k.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Blackmagic_URSA_4.6K.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Foveon_(Sigma).py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Fullframe.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/MFT.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/Medium-format_(Hasselblad).py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/RED_Dragon_5K.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/RED_Dragon_6K.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/RED_Helium_8K.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/camera/RED_Monstro_8K.py +0 -4
- package/staging_area/Blender/5.0/scripts/presets/cloth/Cotton.py +0 -25
- package/staging_area/Blender/5.0/scripts/presets/cloth/Denim.py +0 -25
- package/staging_area/Blender/5.0/scripts/presets/cloth/Leather.py +0 -25
- package/staging_area/Blender/5.0/scripts/presets/cloth/Rubber.py +0 -25
- package/staging_area/Blender/5.0/scripts/presets/cloth/Silk.py +0 -25
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_A.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_B.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_C.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_D50.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_D55.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_D65.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_D75.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_D93.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_E.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_F1.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_F10.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_F11.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_F12.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_F2.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_F3.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_F4.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_F5.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_F6.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_F7.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_F8.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_F9.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_LED-B1.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_LED-B2.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_LED-B3.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_LED-B4.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_LED-B5.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_LED-BH1.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_LED-RGB1.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_LED-V1.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/color_management/white_balance/Illuminant_LED-V2.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/cycles/integrator/Default.py +0 -14
- package/staging_area/Blender/5.0/scripts/presets/cycles/integrator/Direct_Light.py +0 -14
- package/staging_area/Blender/5.0/scripts/presets/cycles/integrator/Fast_Global_Illumination.py +0 -14
- package/staging_area/Blender/5.0/scripts/presets/cycles/integrator/Full_Global_Illumination.py +0 -14
- package/staging_area/Blender/5.0/scripts/presets/cycles/integrator/Limited_Global_Illumination.py +0 -14
- package/staging_area/Blender/5.0/scripts/presets/cycles/performance/Default.py +0 -11
- package/staging_area/Blender/5.0/scripts/presets/cycles/performance/Faster_Render.py +0 -11
- package/staging_area/Blender/5.0/scripts/presets/cycles/performance/Lower_Memory.py +0 -11
- package/staging_area/Blender/5.0/scripts/presets/cycles/sampling/Final.py +0 -12
- package/staging_area/Blender/5.0/scripts/presets/cycles/sampling/Preview.py +0 -12
- package/staging_area/Blender/5.0/scripts/presets/cycles/viewport_sampling/Final.py +0 -11
- package/staging_area/Blender/5.0/scripts/presets/cycles/viewport_sampling/Preview.py +0 -11
- package/staging_area/Blender/5.0/scripts/presets/eevee/raytracing/Default.py +0 -22
- package/staging_area/Blender/5.0/scripts/presets/ffmpeg/DVD_(note_colon__this_changes_render_resolution).py +0 -24
- package/staging_area/Blender/5.0/scripts/presets/ffmpeg/H264_in_MP4.py +0 -18
- package/staging_area/Blender/5.0/scripts/presets/ffmpeg/H264_in_Matroska.py +0 -17
- package/staging_area/Blender/5.0/scripts/presets/ffmpeg/H264_in_Matroska_for_scrubbing.py +0 -14
- package/staging_area/Blender/5.0/scripts/presets/ffmpeg/Ogg_Theora.py +0 -18
- package/staging_area/Blender/5.0/scripts/presets/ffmpeg/WebM_(VP9+Opus).py +0 -9
- package/staging_area/Blender/5.0/scripts/presets/ffmpeg/Xvid.py +0 -18
- package/staging_area/Blender/5.0/scripts/presets/fluid/Honey.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/fluid/Oil.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/fluid/Water.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/framerate/12.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/framerate/120.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/framerate/23.98.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/framerate/24.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/framerate/240.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/framerate/25.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/framerate/29.97.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/framerate/30.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/framerate/50.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/framerate/59.94.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/framerate/6.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/framerate/60.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/framerate/8.py +0 -3
- package/staging_area/Blender/5.0/scripts/presets/framerate/Custom.py +0 -1
- package/staging_area/Blender/5.0/scripts/presets/framerate/__pycache__/30.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/presets/gpencil_material/Fill_Only.py +0 -25
- package/staging_area/Blender/5.0/scripts/presets/gpencil_material/Stroke_Only.py +0 -25
- package/staging_area/Blender/5.0/scripts/presets/gpencil_material/Stroke_and_Fill.py +0 -25
- package/staging_area/Blender/5.0/scripts/presets/hair_dynamics/Default.py +0 -17
- package/staging_area/Blender/5.0/scripts/presets/interface_theme/Blender_Dark.xml +0 -6
- package/staging_area/Blender/5.0/scripts/presets/interface_theme/Blender_Light.xml +0 -1246
- package/staging_area/Blender/5.0/scripts/presets/keyconfig/Blender.py +0 -384
- package/staging_area/Blender/5.0/scripts/presets/keyconfig/Blender_27x.py +0 -106
- package/staging_area/Blender/5.0/scripts/presets/keyconfig/Industry_Compatible.py +0 -41
- package/staging_area/Blender/5.0/scripts/presets/keyconfig/__pycache__/Blender.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/presets/keyconfig/keymap_data/__pycache__/blender_default.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/presets/keyconfig/keymap_data/blender_default.py +0 -9083
- package/staging_area/Blender/5.0/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py +0 -3896
- package/staging_area/Blender/5.0/scripts/presets/pixel_density/Custom.py +0 -1
- package/staging_area/Blender/5.0/scripts/presets/pixel_density/Pixels_slash_Centimeter.py +0 -2
- package/staging_area/Blender/5.0/scripts/presets/pixel_density/Pixels_slash_Inch.py +0 -2
- package/staging_area/Blender/5.0/scripts/presets/pixel_density/Pixels_slash_Meter.py +0 -2
- package/staging_area/Blender/5.0/scripts/presets/render/4K_DCI_2160p.py +0 -8
- package/staging_area/Blender/5.0/scripts/presets/render/4K_UHDTV_2160p.py +0 -8
- package/staging_area/Blender/5.0/scripts/presets/render/4K_UW_1600p.py +0 -8
- package/staging_area/Blender/5.0/scripts/presets/render/DVCPRO_HD_1080p.py +0 -8
- package/staging_area/Blender/5.0/scripts/presets/render/DVCPRO_HD_720p.py +0 -8
- package/staging_area/Blender/5.0/scripts/presets/render/HDTV_1080p.py +0 -8
- package/staging_area/Blender/5.0/scripts/presets/render/HDTV_720p.py +0 -8
- package/staging_area/Blender/5.0/scripts/presets/render/HDV_1080p.py +0 -8
- package/staging_area/Blender/5.0/scripts/presets/render/HDV_NTSC_1080p.py +0 -8
- package/staging_area/Blender/5.0/scripts/presets/render/HDV_PAL_1080p.py +0 -8
- package/staging_area/Blender/5.0/scripts/presets/render/TV_NTSC_16_colon_9.py +0 -8
- package/staging_area/Blender/5.0/scripts/presets/render/TV_NTSC_4_colon_3.py +0 -8
- package/staging_area/Blender/5.0/scripts/presets/render/TV_PAL_16_colon_9.py +0 -8
- package/staging_area/Blender/5.0/scripts/presets/render/TV_PAL_4_colon_3.py +0 -8
- package/staging_area/Blender/5.0/scripts/presets/safe_areas/14_colon_9_in_16_colon_9.py +0 -7
- package/staging_area/Blender/5.0/scripts/presets/safe_areas/16_colon_9.py +0 -7
- package/staging_area/Blender/5.0/scripts/presets/safe_areas/4_colon_3_in_16_colon_9.py +0 -7
- package/staging_area/Blender/5.0/scripts/presets/text_editor/Internal.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/text_editor/Visual_Studio_Code.py +0 -12
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/1_inch.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/1_slash_1.8_inch.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/1_slash_2.3_inch.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/1_slash_2.5_inch.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/1_slash_2.7_inch.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/1_slash_3.2_inch.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/2_slash_3_inch.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/APS-C.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/APS-C_(Canon).py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/APS-H_(Canon).py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Analog_16mm.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Analog_35mm.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Analog_65mm.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Analog_IMAX.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Analog_Super_16.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Analog_Super_35.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Arri_Alexa_65.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Arri_Alexa_LF.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Arri_Alexa_Mini_&_SXT.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Blackmagic_Pocket_&_Studio.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Blackmagic_Pocket_4K.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Blackmagic_Pocket_6k.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Blackmagic_URSA_4.6K.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Foveon_(Sigma).py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Fullframe.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/MFT.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/Medium-format_(Hasselblad).py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/RED_Dragon_5K.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/RED_Dragon_6K.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/RED_Helium_8K.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_camera/RED_Monstro_8K.py +0 -6
- package/staging_area/Blender/5.0/scripts/presets/tracking_settings/Blurry_Footage.py +0 -18
- package/staging_area/Blender/5.0/scripts/presets/tracking_settings/Default.py +0 -18
- package/staging_area/Blender/5.0/scripts/presets/tracking_settings/Fast_Motion.py +0 -18
- package/staging_area/Blender/5.0/scripts/presets/tracking_settings/Planar.py +0 -18
- package/staging_area/Blender/5.0/scripts/presets/tracking_track_color/Default.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/tracking_track_color/Far_Plane.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/tracking_track_color/Near_Plane.py +0 -5
- package/staging_area/Blender/5.0/scripts/presets/tracking_track_color/Object.py +0 -5
- package/staging_area/Blender/5.0/scripts/startup/__pycache__/keyingsets_builtins.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/__pycache__/nodeitems_builtins.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_app_templates_system/2D_Animation/__init__.py +0 -56
- package/staging_area/Blender/5.0/scripts/startup/bl_app_templates_system/2D_Animation/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_app_templates_system/2D_Animation/startup.blend +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_app_templates_system/Sculpting/__init__.py +0 -30
- package/staging_area/Blender/5.0/scripts/startup/bl_app_templates_system/Sculpting/startup.blend +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_app_templates_system/Storyboarding/__init__.py +0 -51
- package/staging_area/Blender/5.0/scripts/startup/bl_app_templates_system/Storyboarding/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_app_templates_system/Storyboarding/startup.blend +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_app_templates_system/VFX/startup.blend +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_app_templates_system/Video_Editing/__init__.py +0 -51
- package/staging_area/Blender/5.0/scripts/startup/bl_app_templates_system/Video_Editing/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_app_templates_system/Video_Editing/startup.blend +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__init__.py +0 -88
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/add_mesh_torus.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/anim.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/assets.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/bone_selection_sets.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/clip.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/connect_to_output.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/console.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/constraint.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/copy_global_transform.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/file.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/freestyle.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/geometry_nodes.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/grease_pencil.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/image.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/image_as_planes.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/mesh.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/node.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/object.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/object_align.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/object_quick_effects.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/object_randomize_transform.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/presets.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/rigidbody.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/screen_play_rendered_anim.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/sequencer.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/spreadsheet.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/userpref.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/uvcalc_follow_active.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/uvcalc_lightmap.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/uvcalc_transform.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/vertexpaint_dirt.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/view3d.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/wm.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/__pycache__/world.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/add_mesh_torus.py +0 -262
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/anim.py +0 -924
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/assets.py +0 -157
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/bmesh/find_adjacent.py +0 -341
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/bone_selection_sets.py +0 -439
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/clip.py +0 -1044
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/connect_to_output.py +0 -360
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/console.py +0 -156
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/constraint.py +0 -121
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/copy_global_transform.py +0 -823
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/file.py +0 -308
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/freestyle.py +0 -226
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/geometry_nodes.py +0 -394
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/grease_pencil.py +0 -63
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/image.py +0 -322
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/image_as_planes.py +0 -1216
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/mesh.py +0 -61
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/node.py +0 -1340
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/node_editor/__pycache__/node_functions.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/node_editor/node_functions.py +0 -97
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/object.py +0 -1014
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/object_align.py +0 -407
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/object_quick_effects.py +0 -680
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/object_randomize_transform.py +0 -181
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/presets.py +0 -1057
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/rigidbody.py +0 -323
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/screen_play_rendered_anim.py +0 -219
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/sequencer.py +0 -438
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/spreadsheet.py +0 -46
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/userpref.py +0 -1324
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/uvcalc_follow_active.py +0 -313
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/uvcalc_lightmap.py +0 -688
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/uvcalc_transform.py +0 -551
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/vertexpaint_dirt.py +0 -198
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/view3d.py +0 -316
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/wm.py +0 -3722
- package/staging_area/Blender/5.0/scripts/startup/bl_operators/world.py +0 -168
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__init__.py +0 -299
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/__init__.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/anim.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/asset_shelf.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/generic_ui_list.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/node_add_menu.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/node_add_menu_compositor.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/node_add_menu_geometry.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/node_add_menu_shader.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/node_add_menu_texture.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_animviz.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_collection.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_constraint.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_armature.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_bone.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_camera.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_curve.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_curves.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_empty.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_grease_pencil.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_lattice.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_light.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_lightprobe.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_mesh.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_metaball.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_modifier.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_pointcloud.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_shaderfx.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_speaker.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_data_volume.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_freestyle.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_grease_pencil_common.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_mask_common.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_material.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_material_gpencil.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_object.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_output.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_paint_common.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_particle.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_physics_cloth.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_physics_common.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_physics_dynamicpaint.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_physics_field.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_physics_fluid.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_physics_geometry_nodes.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_physics_rigidbody.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_physics_rigidbody_constraint.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_physics_softbody.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_render.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_scene.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_strip.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_strip_modifier.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_texture.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_view_layer.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_workspace.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/properties_world.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_clip.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_console.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_dopesheet.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_filebrowser.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_graph.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_image.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_info.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_nla.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_node.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_outliner.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_properties.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_sequencer.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_spreadsheet.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_statusbar.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_text.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_time.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_toolsystem_common.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_toolsystem_toolbar.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_topbar.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_userpref.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_view3d.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_view3d_sidebar.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/space_view3d_toolbar.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/__pycache__/utils.cpython-311.pyc +0 -0
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/anim.py +0 -62
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/asset_shelf.py +0 -41
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/generic_ui_list.py +0 -262
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/node_add_menu.py +0 -505
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/node_add_menu_compositor.py +0 -437
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/node_add_menu_geometry.py +0 -1158
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/node_add_menu_shader.py +0 -511
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/node_add_menu_texture.py +0 -167
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_animviz.py +0 -123
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_collection.py +0 -146
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_constraint.py +0 -1793
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_armature.py +0 -436
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_bone.py +0 -625
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_camera.py +0 -603
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_curve.py +0 -461
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_curves.py +0 -219
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_empty.py +0 -84
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_grease_pencil.py +0 -536
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_lattice.py +0 -105
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_light.py +0 -315
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_lightprobe.py +0 -413
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_mesh.py +0 -744
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_metaball.py +0 -137
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_modifier.py +0 -323
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_pointcloud.py +0 -175
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_shaderfx.py +0 -31
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_speaker.py +0 -157
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_data_volume.py +0 -239
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_freestyle.py +0 -1343
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_grease_pencil_common.py +0 -607
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_mask_common.py +0 -461
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_material.py +0 -460
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_material_gpencil.py +0 -272
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_object.py +0 -656
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_output.py +0 -736
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_paint_common.py +0 -1904
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_particle.py +0 -2308
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_physics_cloth.py +0 -524
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_physics_common.py +0 -360
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_physics_dynamicpaint.py +0 -974
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_physics_field.py +0 -487
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_physics_fluid.py +0 -1629
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_physics_geometry_nodes.py +0 -64
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_physics_rigidbody.py +0 -345
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py +0 -554
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_physics_softbody.py +0 -471
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_render.py +0 -1180
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_scene.py +0 -495
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_strip.py +0 -1056
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_strip_modifier.py +0 -49
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_texture.py +0 -997
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_view_layer.py +0 -348
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_workspace.py +0 -195
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/properties_world.py +0 -282
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_clip.py +0 -2112
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_console.py +0 -157
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_dopesheet.py +0 -1123
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_filebrowser.py +0 -950
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_graph.py +0 -615
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_image.py +0 -1896
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_info.py +0 -117
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_nla.py +0 -429
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_node.py +0 -1247
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_outliner.py +0 -559
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_properties.py +0 -205
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_sequencer.py +0 -2097
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_spreadsheet.py +0 -83
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_statusbar.py +0 -41
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_text.py +0 -479
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_time.py +0 -364
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_toolsystem_common.py +0 -1256
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_toolsystem_toolbar.py +0 -4123
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_topbar.py +0 -891
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_userpref.py +0 -3108
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_view3d.py +0 -9421
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_view3d_sidebar.py +0 -183
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/space_view3d_toolbar.py +0 -2438
- package/staging_area/Blender/5.0/scripts/startup/bl_ui/utils.py +0 -40
- package/staging_area/Blender/5.0/scripts/startup/keyingsets_builtins.py +0 -686
- package/staging_area/Blender/5.0/scripts/startup/nodeitems_builtins.py +0 -54
- package/staging_area/Blender/5.0/scripts/templates_osl/advanced_camera.osl +0 -76
- package/staging_area/Blender/5.0/scripts/templates_osl/basic_camera.osl +0 -14
- package/staging_area/Blender/5.0/scripts/templates_osl/basic_shader.osl +0 -10
- package/staging_area/Blender/5.0/scripts/templates_osl/cubemap_camera.osl +0 -42
- package/staging_area/Blender/5.0/scripts/templates_osl/empty_shader.osl +0 -6
- package/staging_area/Blender/5.0/scripts/templates_osl/gabor_noise.osl +0 -17
- package/staging_area/Blender/5.0/scripts/templates_osl/lyapunov_texture.osl +0 -141
- package/staging_area/Blender/5.0/scripts/templates_osl/noise.osl +0 -27
- package/staging_area/Blender/5.0/scripts/templates_osl/ramp_closure.osl +0 -20
- package/staging_area/Blender/5.0/scripts/templates_py/addon_add_object.py +0 -84
- package/staging_area/Blender/5.0/scripts/templates_py/background_job.py +0 -118
- package/staging_area/Blender/5.0/scripts/templates_py/batch_export.py +0 -42
- package/staging_area/Blender/5.0/scripts/templates_py/bmesh_simple.py +0 -22
- package/staging_area/Blender/5.0/scripts/templates_py/bmesh_simple_editmode.py +0 -23
- package/staging_area/Blender/5.0/scripts/templates_py/builtin_keyingset.py +0 -37
- package/staging_area/Blender/5.0/scripts/templates_py/custom_nodes.py +0 -172
- package/staging_area/Blender/5.0/scripts/templates_py/driver_functions.py +0 -35
- package/staging_area/Blender/5.0/scripts/templates_py/external_script_stub.py +0 -13
- package/staging_area/Blender/5.0/scripts/templates_py/gizmo_custom_geometry.py +0 -157
- package/staging_area/Blender/5.0/scripts/templates_py/gizmo_operator.py +0 -235
- package/staging_area/Blender/5.0/scripts/templates_py/gizmo_operator_target.py +0 -50
- package/staging_area/Blender/5.0/scripts/templates_py/gizmo_simple_2d.py +0 -59
- package/staging_area/Blender/5.0/scripts/templates_py/gizmo_simple_3d.py +0 -47
- package/staging_area/Blender/5.0/scripts/templates_py/image_processing.py +0 -35
- package/staging_area/Blender/5.0/scripts/templates_py/operator_file_export.py +0 -76
- package/staging_area/Blender/5.0/scripts/templates_py/operator_file_import.py +0 -79
- package/staging_area/Blender/5.0/scripts/templates_py/operator_mesh_add.py +0 -116
- package/staging_area/Blender/5.0/scripts/templates_py/operator_mesh_uv.py +0 -56
- package/staging_area/Blender/5.0/scripts/templates_py/operator_modal.py +0 -58
- package/staging_area/Blender/5.0/scripts/templates_py/operator_modal_draw.py +0 -83
- package/staging_area/Blender/5.0/scripts/templates_py/operator_modal_timer.py +0 -54
- package/staging_area/Blender/5.0/scripts/templates_py/operator_modal_view3d.py +0 -77
- package/staging_area/Blender/5.0/scripts/templates_py/operator_modal_view3d_raycast.py +0 -115
- package/staging_area/Blender/5.0/scripts/templates_py/operator_node.py +0 -66
- package/staging_area/Blender/5.0/scripts/templates_py/operator_simple.py +0 -42
- package/staging_area/Blender/5.0/scripts/templates_py/ui_asset_shelf.py +0 -29
- package/staging_area/Blender/5.0/scripts/templates_py/ui_list.py +0 -44
- package/staging_area/Blender/5.0/scripts/templates_py/ui_list_generic.py +0 -47
- package/staging_area/Blender/5.0/scripts/templates_py/ui_list_simple.py +0 -70
- package/staging_area/Blender/5.0/scripts/templates_py/ui_menu.py +0 -50
- package/staging_area/Blender/5.0/scripts/templates_py/ui_menu_simple.py +0 -27
- package/staging_area/Blender/5.0/scripts/templates_py/ui_panel.py +0 -73
- package/staging_area/Blender/5.0/scripts/templates_py/ui_panel_simple.py +0 -38
- package/staging_area/Blender/5.0/scripts/templates_py/ui_pie_menu.py +0 -31
- package/staging_area/Blender/5.0/scripts/templates_py/ui_previews_custom_icon.py +0 -76
- package/staging_area/Blender/5.0/scripts/templates_py/ui_previews_dynamic_enum.py +0 -141
- package/staging_area/Blender/5.0/scripts/templates_py/ui_tool_simple.py +0 -91
- package/staging_area/Blender/5.0/scripts/templates_toml/blender_manifest.toml +0 -75
- package/staging_area/Blender/blender-launcher.exe +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-console-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-console-l1-2-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-datetime-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-debug-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-errorhandling-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-fibers-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-file-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-file-l1-2-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-file-l2-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-handle-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-heap-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-interlocked-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-libraryloader-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-localization-l1-2-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-memory-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-namedpipe-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-processenvironment-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-processthreads-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-processthreads-l1-1-1.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-profile-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-rtlsupport-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-string-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-synch-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-synch-l1-2-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-sysinfo-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-timezone-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-core-util-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-conio-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-convert-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-environment-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-filesystem-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-heap-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-locale-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-math-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-multibyte-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-private-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-process-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-runtime-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-stdio-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-string-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-time-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/api-ms-win-crt-utility-l1-1-0.dll +0 -0
- package/staging_area/Blender/blender.crt/blender.crt.manifest +0 -54
- package/staging_area/Blender/blender.crt/concrt140.dll +0 -0
- package/staging_area/Blender/blender.crt/msvcp140.dll +0 -0
- package/staging_area/Blender/blender.crt/msvcp140_1.dll +0 -0
- package/staging_area/Blender/blender.crt/msvcp140_2.dll +0 -0
- package/staging_area/Blender/blender.crt/msvcp140_atomic_wait.dll +0 -0
- package/staging_area/Blender/blender.crt/msvcp140_codecvt_ids.dll +0 -0
- package/staging_area/Blender/blender.crt/vcruntime140.dll +0 -0
- package/staging_area/Blender/blender.crt/vcruntime140_1.dll +0 -0
|
@@ -1,2421 +0,0 @@
|
|
|
1
|
-
# SPDX-FileCopyrightText: 2013-2023 Blender Foundation
|
|
2
|
-
#
|
|
3
|
-
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
4
|
-
|
|
5
|
-
import bpy
|
|
6
|
-
|
|
7
|
-
from bpy.types import Operator
|
|
8
|
-
from bpy.props import (
|
|
9
|
-
FloatProperty,
|
|
10
|
-
EnumProperty,
|
|
11
|
-
BoolProperty,
|
|
12
|
-
IntProperty,
|
|
13
|
-
StringProperty,
|
|
14
|
-
CollectionProperty,
|
|
15
|
-
)
|
|
16
|
-
from bpy.app.translations import (
|
|
17
|
-
pgettext_rpt as rpt_,
|
|
18
|
-
contexts as i18n_contexts,
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
from bpy_extras.io_utils import ImportHelper, ExportHelper
|
|
22
|
-
from bpy_extras.node_utils import connect_sockets
|
|
23
|
-
from mathutils import Vector
|
|
24
|
-
from os import path
|
|
25
|
-
from glob import glob
|
|
26
|
-
from copy import copy
|
|
27
|
-
from itertools import chain
|
|
28
|
-
|
|
29
|
-
from .interface import NWConnectionListInputs, NWConnectionListOutputs
|
|
30
|
-
|
|
31
|
-
from .utils.constants import blend_types, geo_combine_operations, operations, navs, get_texture_node_types, rl_outputs
|
|
32
|
-
from .utils.draw import draw_callback_nodeoutline
|
|
33
|
-
from .utils.paths import match_files_to_socket_names, split_into_components
|
|
34
|
-
from .utils.nodes import (node_mid_pt, autolink, node_at_pos, get_nodes_links,
|
|
35
|
-
force_update, nw_check,
|
|
36
|
-
nw_check_not_empty, nw_check_selected, nw_check_active, nw_check_space_type,
|
|
37
|
-
nw_check_node_type, nw_check_visible_outputs, get_viewer_image, nw_check_viewer_node, NWBase,
|
|
38
|
-
get_first_enabled_output, is_visible_socket)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
class NWLazyMix(Operator, NWBase):
|
|
42
|
-
"""Add a Mix RGB/Shader node by interactively drawing lines between nodes"""
|
|
43
|
-
bl_idname = "node.nw_lazy_mix"
|
|
44
|
-
bl_label = "Mix Nodes"
|
|
45
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
46
|
-
|
|
47
|
-
@classmethod
|
|
48
|
-
def poll(cls, context):
|
|
49
|
-
return nw_check(cls, context) and nw_check_not_empty(cls, context)
|
|
50
|
-
|
|
51
|
-
def modal(self, context, event):
|
|
52
|
-
context.area.tag_redraw()
|
|
53
|
-
nodes, links = get_nodes_links(context)
|
|
54
|
-
cont = True
|
|
55
|
-
|
|
56
|
-
node1 = None
|
|
57
|
-
if not context.scene.NWBusyDrawing:
|
|
58
|
-
node1 = node_at_pos(nodes, context, event)
|
|
59
|
-
if node1:
|
|
60
|
-
context.scene.NWBusyDrawing = node1.name
|
|
61
|
-
else:
|
|
62
|
-
if context.scene.NWBusyDrawing != 'STOP':
|
|
63
|
-
node1 = nodes[context.scene.NWBusyDrawing]
|
|
64
|
-
|
|
65
|
-
context.scene.NWLazySource = node1.name
|
|
66
|
-
context.scene.NWLazyTarget = node_at_pos(nodes, context, event).name
|
|
67
|
-
|
|
68
|
-
if event.type == 'MOUSEMOVE':
|
|
69
|
-
self.mouse_path.append((event.mouse_region_x, event.mouse_region_y))
|
|
70
|
-
|
|
71
|
-
elif event.type == 'RIGHTMOUSE' and event.value == 'RELEASE':
|
|
72
|
-
bpy.types.SpaceNodeEditor.draw_handler_remove(self._handle, 'WINDOW')
|
|
73
|
-
|
|
74
|
-
node2 = None
|
|
75
|
-
node2 = node_at_pos(nodes, context, event)
|
|
76
|
-
if node2:
|
|
77
|
-
context.scene.NWBusyDrawing = node2.name
|
|
78
|
-
|
|
79
|
-
if node1 == node2:
|
|
80
|
-
cont = False
|
|
81
|
-
|
|
82
|
-
if cont:
|
|
83
|
-
if node1 and node2:
|
|
84
|
-
for node in nodes:
|
|
85
|
-
node.select = False
|
|
86
|
-
node1.select = True
|
|
87
|
-
node2.select = True
|
|
88
|
-
|
|
89
|
-
bpy.ops.node.nw_merge_nodes(mode="MIX", merge_type="AUTO")
|
|
90
|
-
|
|
91
|
-
context.scene.NWBusyDrawing = ""
|
|
92
|
-
return {'FINISHED'}
|
|
93
|
-
|
|
94
|
-
elif event.type == 'ESC':
|
|
95
|
-
print('cancelled')
|
|
96
|
-
bpy.types.SpaceNodeEditor.draw_handler_remove(self._handle, 'WINDOW')
|
|
97
|
-
return {'CANCELLED'}
|
|
98
|
-
|
|
99
|
-
return {'RUNNING_MODAL'}
|
|
100
|
-
|
|
101
|
-
def invoke(self, context, event):
|
|
102
|
-
if context.area.type == 'NODE_EDITOR':
|
|
103
|
-
# the arguments we pass the the callback
|
|
104
|
-
args = (self, context, 'MIX')
|
|
105
|
-
# Add the region OpenGL drawing callback
|
|
106
|
-
# draw in view space with 'POST_VIEW' and 'PRE_VIEW'
|
|
107
|
-
self._handle = bpy.types.SpaceNodeEditor.draw_handler_add(
|
|
108
|
-
draw_callback_nodeoutline, args, 'WINDOW', 'POST_PIXEL')
|
|
109
|
-
|
|
110
|
-
self.mouse_path = []
|
|
111
|
-
|
|
112
|
-
context.window_manager.modal_handler_add(self)
|
|
113
|
-
return {'RUNNING_MODAL'}
|
|
114
|
-
else:
|
|
115
|
-
self.report({'WARNING'}, "View3D not found, cannot run operator")
|
|
116
|
-
return {'CANCELLED'}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
class NWLazyConnect(Operator, NWBase):
|
|
120
|
-
"""Connect two nodes without clicking a specific socket (automatically determined)"""
|
|
121
|
-
bl_idname = "node.nw_lazy_connect"
|
|
122
|
-
bl_label = "Lazy Connect"
|
|
123
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
124
|
-
with_menu: BoolProperty()
|
|
125
|
-
|
|
126
|
-
@classmethod
|
|
127
|
-
def poll(cls, context):
|
|
128
|
-
return nw_check(cls, context) and nw_check_not_empty(cls, context)
|
|
129
|
-
|
|
130
|
-
def modal(self, context, event):
|
|
131
|
-
context.area.tag_redraw()
|
|
132
|
-
nodes, links = get_nodes_links(context)
|
|
133
|
-
cont = True
|
|
134
|
-
|
|
135
|
-
node1 = None
|
|
136
|
-
if not context.scene.NWBusyDrawing:
|
|
137
|
-
node1 = node_at_pos(nodes, context, event)
|
|
138
|
-
if node1:
|
|
139
|
-
context.scene.NWBusyDrawing = node1.name
|
|
140
|
-
else:
|
|
141
|
-
if context.scene.NWBusyDrawing != 'STOP':
|
|
142
|
-
node1 = nodes[context.scene.NWBusyDrawing]
|
|
143
|
-
|
|
144
|
-
context.scene.NWLazySource = node1.name
|
|
145
|
-
context.scene.NWLazyTarget = node_at_pos(nodes, context, event).name
|
|
146
|
-
|
|
147
|
-
if event.type == 'MOUSEMOVE':
|
|
148
|
-
self.mouse_path.append((event.mouse_region_x, event.mouse_region_y))
|
|
149
|
-
|
|
150
|
-
elif event.type == 'RIGHTMOUSE' and event.value == 'RELEASE':
|
|
151
|
-
bpy.types.SpaceNodeEditor.draw_handler_remove(self._handle, 'WINDOW')
|
|
152
|
-
|
|
153
|
-
node2 = None
|
|
154
|
-
node2 = node_at_pos(nodes, context, event)
|
|
155
|
-
if node2:
|
|
156
|
-
context.scene.NWBusyDrawing = node2.name
|
|
157
|
-
|
|
158
|
-
if node1 == node2:
|
|
159
|
-
cont = False
|
|
160
|
-
|
|
161
|
-
link_success = False
|
|
162
|
-
if cont:
|
|
163
|
-
if node1 and node2:
|
|
164
|
-
original_sel = []
|
|
165
|
-
original_unsel = []
|
|
166
|
-
for node in nodes:
|
|
167
|
-
if node.select:
|
|
168
|
-
node.select = False
|
|
169
|
-
original_sel.append(node)
|
|
170
|
-
else:
|
|
171
|
-
original_unsel.append(node)
|
|
172
|
-
node1.select = True
|
|
173
|
-
node2.select = True
|
|
174
|
-
|
|
175
|
-
# link_success = autolink(node1, node2, links)
|
|
176
|
-
if self.with_menu:
|
|
177
|
-
if len(node1.outputs) > 1 and node2.inputs:
|
|
178
|
-
bpy.ops.wm.call_menu("INVOKE_DEFAULT", name=NWConnectionListOutputs.bl_idname)
|
|
179
|
-
elif len(node1.outputs) == 1:
|
|
180
|
-
bpy.ops.node.nw_call_inputs_menu(from_socket=0)
|
|
181
|
-
else:
|
|
182
|
-
link_success = autolink(node1, node2, links)
|
|
183
|
-
|
|
184
|
-
for node in original_sel:
|
|
185
|
-
node.select = True
|
|
186
|
-
for node in original_unsel:
|
|
187
|
-
node.select = False
|
|
188
|
-
|
|
189
|
-
if link_success:
|
|
190
|
-
force_update(context)
|
|
191
|
-
context.scene.NWBusyDrawing = ""
|
|
192
|
-
return {'FINISHED'}
|
|
193
|
-
|
|
194
|
-
elif event.type == 'ESC':
|
|
195
|
-
bpy.types.SpaceNodeEditor.draw_handler_remove(self._handle, 'WINDOW')
|
|
196
|
-
return {'CANCELLED'}
|
|
197
|
-
|
|
198
|
-
return {'RUNNING_MODAL'}
|
|
199
|
-
|
|
200
|
-
def invoke(self, context, event):
|
|
201
|
-
if context.area.type == 'NODE_EDITOR':
|
|
202
|
-
nodes, links = get_nodes_links(context)
|
|
203
|
-
node = node_at_pos(nodes, context, event)
|
|
204
|
-
if node:
|
|
205
|
-
context.scene.NWBusyDrawing = node.name
|
|
206
|
-
|
|
207
|
-
# the arguments we pass the the callback
|
|
208
|
-
mode = "LINK"
|
|
209
|
-
if self.with_menu:
|
|
210
|
-
mode = "LINKMENU"
|
|
211
|
-
args = (self, context, mode)
|
|
212
|
-
# Add the region OpenGL drawing callback
|
|
213
|
-
# draw in view space with 'POST_VIEW' and 'PRE_VIEW'
|
|
214
|
-
self._handle = bpy.types.SpaceNodeEditor.draw_handler_add(
|
|
215
|
-
draw_callback_nodeoutline, args, 'WINDOW', 'POST_PIXEL')
|
|
216
|
-
|
|
217
|
-
self.mouse_path = []
|
|
218
|
-
|
|
219
|
-
context.window_manager.modal_handler_add(self)
|
|
220
|
-
return {'RUNNING_MODAL'}
|
|
221
|
-
else:
|
|
222
|
-
self.report({'WARNING'}, "View3D not found, cannot run operator")
|
|
223
|
-
return {'CANCELLED'}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
class NWDeleteUnused(Operator, NWBase):
|
|
227
|
-
"""Delete all nodes whose output is not used"""
|
|
228
|
-
bl_idname = 'node.nw_del_unused'
|
|
229
|
-
bl_label = 'Delete Unused Nodes'
|
|
230
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
231
|
-
|
|
232
|
-
delete_muted: BoolProperty(
|
|
233
|
-
name="Delete Muted",
|
|
234
|
-
description="Delete (but reconnect, like Ctrl-X) all muted nodes",
|
|
235
|
-
default=True)
|
|
236
|
-
delete_frames: BoolProperty(
|
|
237
|
-
name="Delete Empty Frames",
|
|
238
|
-
description="Delete all frames that have no nodes inside them",
|
|
239
|
-
default=True)
|
|
240
|
-
|
|
241
|
-
def is_unused_node(self, node):
|
|
242
|
-
end_types = ['OUTPUT_MATERIAL', 'OUTPUT', 'VIEWER', 'COMPOSITE',
|
|
243
|
-
'SPLITVIEWER', 'OUTPUT_FILE', 'LEVELS', 'OUTPUT_LIGHT',
|
|
244
|
-
'OUTPUT_WORLD', 'GROUP_INPUT', 'GROUP_OUTPUT', 'FRAME',
|
|
245
|
-
'WARNING']
|
|
246
|
-
if node.type in end_types:
|
|
247
|
-
return False
|
|
248
|
-
|
|
249
|
-
for output in node.outputs:
|
|
250
|
-
if output.links:
|
|
251
|
-
return False
|
|
252
|
-
return True
|
|
253
|
-
|
|
254
|
-
@classmethod
|
|
255
|
-
def poll(cls, context):
|
|
256
|
-
"""Disabled for custom nodes as we do not know which nodes are supported."""
|
|
257
|
-
return (nw_check(cls, context)
|
|
258
|
-
and nw_check_not_empty(cls, context)
|
|
259
|
-
and nw_check_space_type(cls, context, {'ShaderNodeTree', 'CompositorNodeTree',
|
|
260
|
-
'TextureNodeTree', 'GeometryNodeTree'}))
|
|
261
|
-
|
|
262
|
-
def execute(self, context):
|
|
263
|
-
nodes, links = get_nodes_links(context)
|
|
264
|
-
|
|
265
|
-
# Store selection
|
|
266
|
-
selection = []
|
|
267
|
-
for node in nodes:
|
|
268
|
-
if node.select:
|
|
269
|
-
selection.append(node.name)
|
|
270
|
-
|
|
271
|
-
for node in nodes:
|
|
272
|
-
node.select = False
|
|
273
|
-
|
|
274
|
-
deleted_nodes = []
|
|
275
|
-
temp_deleted_nodes = []
|
|
276
|
-
del_unused_iterations = len(nodes)
|
|
277
|
-
for it in range(0, del_unused_iterations):
|
|
278
|
-
temp_deleted_nodes = list(deleted_nodes) # keep record of last iteration
|
|
279
|
-
for node in nodes:
|
|
280
|
-
if self.is_unused_node(node):
|
|
281
|
-
node.select = True
|
|
282
|
-
deleted_nodes.append(node.name)
|
|
283
|
-
bpy.ops.node.delete()
|
|
284
|
-
|
|
285
|
-
if temp_deleted_nodes == deleted_nodes: # stop iterations when there are no more nodes to be deleted
|
|
286
|
-
break
|
|
287
|
-
|
|
288
|
-
if self.delete_frames:
|
|
289
|
-
repeat = True
|
|
290
|
-
while repeat:
|
|
291
|
-
frames_in_use = []
|
|
292
|
-
frames = []
|
|
293
|
-
repeat = False
|
|
294
|
-
for node in nodes:
|
|
295
|
-
if node.parent:
|
|
296
|
-
frames_in_use.append(node.parent)
|
|
297
|
-
for node in nodes:
|
|
298
|
-
if node.type == 'FRAME' and node not in frames_in_use:
|
|
299
|
-
frames.append(node)
|
|
300
|
-
if node.parent:
|
|
301
|
-
repeat = True # repeat for nested frames
|
|
302
|
-
for node in frames:
|
|
303
|
-
if node not in frames_in_use:
|
|
304
|
-
node.select = True
|
|
305
|
-
deleted_nodes.append(node.name)
|
|
306
|
-
bpy.ops.node.delete()
|
|
307
|
-
|
|
308
|
-
if self.delete_muted:
|
|
309
|
-
for node in nodes:
|
|
310
|
-
if node.mute:
|
|
311
|
-
node.select = True
|
|
312
|
-
deleted_nodes.append(node.name)
|
|
313
|
-
bpy.ops.node.delete_reconnect()
|
|
314
|
-
|
|
315
|
-
# get unique list of deleted nodes (iterations would count the same node more than once)
|
|
316
|
-
deleted_nodes = list(set(deleted_nodes))
|
|
317
|
-
for n in deleted_nodes:
|
|
318
|
-
self.report({'INFO'}, rpt_("Node {} deleted").format(n))
|
|
319
|
-
num_deleted = len(deleted_nodes)
|
|
320
|
-
if num_deleted == 0:
|
|
321
|
-
self.report({'INFO'}, "Nothing to delete")
|
|
322
|
-
else:
|
|
323
|
-
if num_deleted > 1:
|
|
324
|
-
message = rpt_("Deleted {} nodes".format(num_deleted))
|
|
325
|
-
else:
|
|
326
|
-
message = rpt_("Deleted 1 node")
|
|
327
|
-
self.report({'INFO'}, message)
|
|
328
|
-
|
|
329
|
-
# Restore selection
|
|
330
|
-
nodes, links = get_nodes_links(context)
|
|
331
|
-
for node in nodes:
|
|
332
|
-
if node.name in selection:
|
|
333
|
-
node.select = True
|
|
334
|
-
return {'FINISHED'}
|
|
335
|
-
|
|
336
|
-
def invoke(self, context, event):
|
|
337
|
-
return context.window_manager.invoke_confirm(self, event)
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
class NWSwapLinks(Operator, NWBase):
|
|
341
|
-
"""Swap the output connections of the two selected nodes, or two similar inputs of a single node"""
|
|
342
|
-
bl_idname = 'node.nw_swap_links'
|
|
343
|
-
bl_label = 'Swap Links'
|
|
344
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
345
|
-
|
|
346
|
-
@classmethod
|
|
347
|
-
def poll(cls, context):
|
|
348
|
-
return nw_check(cls, context) and nw_check_selected(cls, context, max=2)
|
|
349
|
-
|
|
350
|
-
def execute(self, context):
|
|
351
|
-
nodes, links = get_nodes_links(context)
|
|
352
|
-
selected_nodes = context.selected_nodes
|
|
353
|
-
n1 = selected_nodes[0]
|
|
354
|
-
|
|
355
|
-
# Swap outputs
|
|
356
|
-
if len(selected_nodes) == 2:
|
|
357
|
-
n2 = selected_nodes[1]
|
|
358
|
-
if n1.outputs and n2.outputs:
|
|
359
|
-
n1_outputs = []
|
|
360
|
-
n2_outputs = []
|
|
361
|
-
|
|
362
|
-
out_index = 0
|
|
363
|
-
for output in n1.outputs:
|
|
364
|
-
if output.links:
|
|
365
|
-
for link in output.links:
|
|
366
|
-
n1_outputs.append([out_index, link.to_socket])
|
|
367
|
-
links.remove(link)
|
|
368
|
-
out_index += 1
|
|
369
|
-
|
|
370
|
-
out_index = 0
|
|
371
|
-
for output in n2.outputs:
|
|
372
|
-
if output.links:
|
|
373
|
-
for link in output.links:
|
|
374
|
-
n2_outputs.append([out_index, link.to_socket])
|
|
375
|
-
links.remove(link)
|
|
376
|
-
out_index += 1
|
|
377
|
-
|
|
378
|
-
for connection in n1_outputs:
|
|
379
|
-
try:
|
|
380
|
-
connect_sockets(n2.outputs[connection[0]], connection[1])
|
|
381
|
-
except:
|
|
382
|
-
self.report({'WARNING'},
|
|
383
|
-
"Some connections have been lost due to differing numbers of output sockets")
|
|
384
|
-
for connection in n2_outputs:
|
|
385
|
-
try:
|
|
386
|
-
connect_sockets(n1.outputs[connection[0]], connection[1])
|
|
387
|
-
except:
|
|
388
|
-
self.report({'WARNING'},
|
|
389
|
-
"Some connections have been lost due to differing numbers of output sockets")
|
|
390
|
-
else:
|
|
391
|
-
if n1.outputs or n2.outputs:
|
|
392
|
-
self.report({'WARNING'}, "One of the nodes has no outputs")
|
|
393
|
-
else:
|
|
394
|
-
self.report({'WARNING'}, "Neither of the nodes have outputs")
|
|
395
|
-
|
|
396
|
-
# Swap Inputs
|
|
397
|
-
elif len(selected_nodes) == 1:
|
|
398
|
-
if n1.inputs and n1.inputs[0].is_multi_input:
|
|
399
|
-
self.report({'WARNING'}, "Cannot swap inputs of a multi-input socket")
|
|
400
|
-
return {'FINISHED'}
|
|
401
|
-
if n1.inputs:
|
|
402
|
-
types = []
|
|
403
|
-
i = 0
|
|
404
|
-
for i1 in n1.inputs:
|
|
405
|
-
if i1.is_linked and not i1.is_multi_input:
|
|
406
|
-
similar_types = 0
|
|
407
|
-
for i2 in n1.inputs:
|
|
408
|
-
if i1.type == i2.type and i2.is_linked and not i2.is_multi_input:
|
|
409
|
-
similar_types += 1
|
|
410
|
-
types.append([i1, similar_types, i])
|
|
411
|
-
i += 1
|
|
412
|
-
types.sort(key=lambda k: k[1], reverse=True)
|
|
413
|
-
|
|
414
|
-
if types:
|
|
415
|
-
t = types[0]
|
|
416
|
-
if t[1] == 2:
|
|
417
|
-
for i2 in n1.inputs:
|
|
418
|
-
if t[0].type == i2.type == t[0].type and t[0] != i2 and i2.is_linked:
|
|
419
|
-
pair = [t[0], i2]
|
|
420
|
-
i1f = pair[0].links[0].from_socket
|
|
421
|
-
i1t = pair[0].links[0].to_socket
|
|
422
|
-
i2f = pair[1].links[0].from_socket
|
|
423
|
-
i2t = pair[1].links[0].to_socket
|
|
424
|
-
connect_sockets(i1f, i2t)
|
|
425
|
-
connect_sockets(i2f, i1t)
|
|
426
|
-
if t[1] == 1:
|
|
427
|
-
if len(types) == 1:
|
|
428
|
-
fs = t[0].links[0].from_socket
|
|
429
|
-
i = t[2]
|
|
430
|
-
links.remove(t[0].links[0])
|
|
431
|
-
if i + 1 == len(n1.inputs):
|
|
432
|
-
i = -1
|
|
433
|
-
i += 1
|
|
434
|
-
while n1.inputs[i].is_linked:
|
|
435
|
-
i += 1
|
|
436
|
-
connect_sockets(fs, n1.inputs[i])
|
|
437
|
-
elif len(types) == 2:
|
|
438
|
-
i1f = types[0][0].links[0].from_socket
|
|
439
|
-
i1t = types[0][0].links[0].to_socket
|
|
440
|
-
i2f = types[1][0].links[0].from_socket
|
|
441
|
-
i2t = types[1][0].links[0].to_socket
|
|
442
|
-
connect_sockets(i1f, i2t)
|
|
443
|
-
connect_sockets(i2f, i1t)
|
|
444
|
-
|
|
445
|
-
else:
|
|
446
|
-
self.report({'WARNING'}, "This node has no input connections to swap")
|
|
447
|
-
else:
|
|
448
|
-
self.report({'WARNING'}, "This node has no inputs to swap")
|
|
449
|
-
|
|
450
|
-
force_update(context)
|
|
451
|
-
return {'FINISHED'}
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
class NWResetBG(Operator, NWBase):
|
|
455
|
-
"""Reset the zoom and position of the background image"""
|
|
456
|
-
bl_idname = 'node.nw_bg_reset'
|
|
457
|
-
bl_label = 'Reset Backdrop'
|
|
458
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
459
|
-
|
|
460
|
-
@classmethod
|
|
461
|
-
def poll(cls, context):
|
|
462
|
-
return nw_check(cls, context) and nw_check_space_type(cls, context, {'CompositorNodeTree'})
|
|
463
|
-
|
|
464
|
-
def execute(self, context):
|
|
465
|
-
context.space_data.backdrop_zoom = 1
|
|
466
|
-
context.space_data.backdrop_offset[0] = 0
|
|
467
|
-
context.space_data.backdrop_offset[1] = 0
|
|
468
|
-
return {'FINISHED'}
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
class NWAddAttrNode(Operator, NWBase):
|
|
472
|
-
"""Add an Attribute node with this name"""
|
|
473
|
-
bl_idname = 'node.nw_add_attr_node'
|
|
474
|
-
bl_label = 'Add UV map'
|
|
475
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
476
|
-
|
|
477
|
-
attr_name: StringProperty()
|
|
478
|
-
|
|
479
|
-
@classmethod
|
|
480
|
-
def poll(cls, context):
|
|
481
|
-
return nw_check(cls, context) and nw_check_space_type(cls, context, {'ShaderNodeTree'})
|
|
482
|
-
|
|
483
|
-
def execute(self, context):
|
|
484
|
-
bpy.ops.node.add_node('INVOKE_DEFAULT', use_transform=True, type="ShaderNodeAttribute")
|
|
485
|
-
nodes, links = get_nodes_links(context)
|
|
486
|
-
nodes.active.attribute_name = self.attr_name
|
|
487
|
-
return {'FINISHED'}
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
class NWReloadImages(Operator):
|
|
491
|
-
bl_idname = "node.nw_reload_images"
|
|
492
|
-
bl_label = "Reload Images"
|
|
493
|
-
bl_description = "Update all the image nodes to match their files on disk"
|
|
494
|
-
|
|
495
|
-
@classmethod
|
|
496
|
-
def poll(cls, context):
|
|
497
|
-
"""Disabled for custom nodes."""
|
|
498
|
-
return (nw_check(cls, context)
|
|
499
|
-
and nw_check_space_type(cls, context, {'ShaderNodeTree', 'CompositorNodeTree',
|
|
500
|
-
'TextureNodeTree', 'GeometryNodeTree'}))
|
|
501
|
-
|
|
502
|
-
def execute(self, context):
|
|
503
|
-
nodes, links = get_nodes_links(context)
|
|
504
|
-
image_types = ["IMAGE", "TEX_IMAGE", "TEX_ENVIRONMENT", "TEXTURE"]
|
|
505
|
-
num_reloaded = 0
|
|
506
|
-
for node in nodes:
|
|
507
|
-
if node.type in image_types:
|
|
508
|
-
if node.type == "TEXTURE":
|
|
509
|
-
if node.texture: # node has texture assigned
|
|
510
|
-
if node.texture.type in ['IMAGE', 'ENVIRONMENT_MAP']:
|
|
511
|
-
if node.texture.image: # texture has image assigned
|
|
512
|
-
node.texture.image.reload()
|
|
513
|
-
num_reloaded += 1
|
|
514
|
-
else:
|
|
515
|
-
if node.image:
|
|
516
|
-
node.image.reload()
|
|
517
|
-
num_reloaded += 1
|
|
518
|
-
|
|
519
|
-
if num_reloaded:
|
|
520
|
-
self.report({'INFO'}, "Reloaded images")
|
|
521
|
-
print("Reloaded " + str(num_reloaded) + " images")
|
|
522
|
-
force_update(context)
|
|
523
|
-
return {'FINISHED'}
|
|
524
|
-
else:
|
|
525
|
-
self.report({'WARNING'}, "No images found to reload in this node tree")
|
|
526
|
-
return {'CANCELLED'}
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
class NWMergeNodes(Operator, NWBase):
|
|
530
|
-
bl_idname = "node.nw_merge_nodes"
|
|
531
|
-
bl_label = "Merge Nodes"
|
|
532
|
-
bl_description = "Merge selected nodes"
|
|
533
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
534
|
-
|
|
535
|
-
mode: EnumProperty(
|
|
536
|
-
name="Mode",
|
|
537
|
-
translation_context=i18n_contexts.id_nodetree,
|
|
538
|
-
description="All possible blend types, boolean operations and math operations",
|
|
539
|
-
items=blend_types + [op for op in geo_combine_operations if op not in blend_types] + [op for op in operations if op not in blend_types],
|
|
540
|
-
)
|
|
541
|
-
merge_type: EnumProperty(
|
|
542
|
-
name="Merge Type",
|
|
543
|
-
description="Type of Merge to be used",
|
|
544
|
-
items=(
|
|
545
|
-
('AUTO', 'Auto', 'Automatic output type detection'),
|
|
546
|
-
('SHADER', 'Shader', 'Merge using ADD or MIX Shader'),
|
|
547
|
-
('GEOMETRY', 'Geometry', 'Merge using Mesh Boolean or Join Geometry nodes'),
|
|
548
|
-
('MIX', 'Mix Node', 'Merge using Mix nodes'),
|
|
549
|
-
('MATH', 'Math Node', 'Merge using Math nodes'),
|
|
550
|
-
('ZCOMBINE', 'Z-Combine Node', 'Merge using Z-Combine nodes'),
|
|
551
|
-
('ALPHAOVER', 'Alpha Over Node', 'Merge using Alpha Over nodes'),
|
|
552
|
-
),
|
|
553
|
-
)
|
|
554
|
-
|
|
555
|
-
# Check if the link connects to a node that is in selected_nodes
|
|
556
|
-
# If not, then check recursively for each link in the nodes outputs.
|
|
557
|
-
# If yes, return True. If the recursion stops without finding a node
|
|
558
|
-
# in selected_nodes, it returns False. The depth is used to prevent
|
|
559
|
-
# getting stuck in a loop because of an already present cycle.
|
|
560
|
-
@staticmethod
|
|
561
|
-
def link_creates_cycle(link, selected_nodes, depth=0) -> bool:
|
|
562
|
-
if depth > 255:
|
|
563
|
-
# We're stuck in a cycle, but that cycle was already present,
|
|
564
|
-
# so we return False.
|
|
565
|
-
# NOTE: The number 255 is arbitrary, but seems to work well.
|
|
566
|
-
return False
|
|
567
|
-
node = link.to_node
|
|
568
|
-
if node in selected_nodes:
|
|
569
|
-
return True
|
|
570
|
-
if not node.outputs:
|
|
571
|
-
return False
|
|
572
|
-
for output in node.outputs:
|
|
573
|
-
if output.is_linked:
|
|
574
|
-
for olink in output.links:
|
|
575
|
-
if NWMergeNodes.link_creates_cycle(olink, selected_nodes, depth + 1):
|
|
576
|
-
return True
|
|
577
|
-
# None of the outputs found a node in selected_nodes, so there is no cycle.
|
|
578
|
-
return False
|
|
579
|
-
|
|
580
|
-
# Merge the nodes in `nodes_list` with a node of type `node_name` that has a multi_input socket.
|
|
581
|
-
# The parameters `socket_indices` gives the indices of the node sockets in the order that they should
|
|
582
|
-
# be connected. The last one is assumed to be a multi input socket.
|
|
583
|
-
# For convenience the node is returned.
|
|
584
|
-
@staticmethod
|
|
585
|
-
def merge_with_multi_input(nodes_list, merge_position, do_hide, loc_x, links, nodes, node_name, socket_indices):
|
|
586
|
-
# The y-location of the last node
|
|
587
|
-
loc_y = nodes_list[-1][2]
|
|
588
|
-
if merge_position == 'CENTER':
|
|
589
|
-
# Average the y-location
|
|
590
|
-
for i in range(len(nodes_list) - 1):
|
|
591
|
-
loc_y += nodes_list[i][2]
|
|
592
|
-
loc_y = loc_y / len(nodes_list)
|
|
593
|
-
new_node = nodes.new(node_name)
|
|
594
|
-
new_node.hide = do_hide
|
|
595
|
-
new_node.location.x = loc_x
|
|
596
|
-
new_node.location.y = loc_y
|
|
597
|
-
selected_nodes = [nodes[node_info[0]] for node_info in nodes_list]
|
|
598
|
-
prev_links = []
|
|
599
|
-
outputs_for_multi_input = []
|
|
600
|
-
for i, node in enumerate(selected_nodes):
|
|
601
|
-
node.select = False
|
|
602
|
-
# Search for the first node which had output links that do not create
|
|
603
|
-
# a cycle, which we can then reconnect afterwards.
|
|
604
|
-
if prev_links == [] and node.outputs[0].is_linked:
|
|
605
|
-
prev_links = [
|
|
606
|
-
link for link in node.outputs[0].links if not NWMergeNodes.link_creates_cycle(
|
|
607
|
-
link, selected_nodes)]
|
|
608
|
-
# Get the index of the socket, the last one is a multi input, and is thus used repeatedly
|
|
609
|
-
# To get the placement to look right we need to reverse the order in which we connect the
|
|
610
|
-
# outputs to the multi input socket.
|
|
611
|
-
if i < len(socket_indices) - 1:
|
|
612
|
-
ind = socket_indices[i]
|
|
613
|
-
connect_sockets(node.outputs[0], new_node.inputs[ind])
|
|
614
|
-
else:
|
|
615
|
-
outputs_for_multi_input.insert(0, node.outputs[0])
|
|
616
|
-
if outputs_for_multi_input != []:
|
|
617
|
-
ind = socket_indices[-1]
|
|
618
|
-
for output in outputs_for_multi_input:
|
|
619
|
-
connect_sockets(output, new_node.inputs[ind])
|
|
620
|
-
if prev_links != []:
|
|
621
|
-
for link in prev_links:
|
|
622
|
-
connect_sockets(new_node.outputs[0], link.to_node.inputs[0])
|
|
623
|
-
return new_node
|
|
624
|
-
|
|
625
|
-
@classmethod
|
|
626
|
-
def poll(cls, context):
|
|
627
|
-
return (nw_check(cls, context)
|
|
628
|
-
and nw_check_space_type(cls, context, {'ShaderNodeTree', 'CompositorNodeTree',
|
|
629
|
-
'TextureNodeTree', 'GeometryNodeTree'})
|
|
630
|
-
and nw_check_selected(cls, context))
|
|
631
|
-
|
|
632
|
-
def execute(self, context):
|
|
633
|
-
settings = context.preferences.addons[__package__].preferences
|
|
634
|
-
merge_hide = settings.merge_hide
|
|
635
|
-
merge_position = settings.merge_position # 'center' or 'bottom'
|
|
636
|
-
|
|
637
|
-
do_hide = False
|
|
638
|
-
do_hide_shader = False
|
|
639
|
-
if merge_hide == 'ALWAYS':
|
|
640
|
-
do_hide = True
|
|
641
|
-
do_hide_shader = True
|
|
642
|
-
elif merge_hide == 'NON_SHADER':
|
|
643
|
-
do_hide = True
|
|
644
|
-
|
|
645
|
-
tree_type = context.space_data.node_tree.type
|
|
646
|
-
if tree_type == 'GEOMETRY':
|
|
647
|
-
node_type = 'GeometryNode'
|
|
648
|
-
if tree_type == 'COMPOSITING':
|
|
649
|
-
node_type = 'CompositorNode'
|
|
650
|
-
elif tree_type == 'SHADER':
|
|
651
|
-
node_type = 'ShaderNode'
|
|
652
|
-
elif tree_type == 'TEXTURE':
|
|
653
|
-
node_type = 'TextureNode'
|
|
654
|
-
nodes, links = get_nodes_links(context)
|
|
655
|
-
mode = self.mode
|
|
656
|
-
merge_type = self.merge_type
|
|
657
|
-
# Prevent trying to add Z-Combine in not 'COMPOSITING' node tree.
|
|
658
|
-
# 'ZCOMBINE' works only if mode == 'MIX'
|
|
659
|
-
# Setting mode to None prevents trying to add 'ZCOMBINE' node.
|
|
660
|
-
if (merge_type == 'ZCOMBINE' or merge_type == 'ALPHAOVER') and tree_type != 'COMPOSITING':
|
|
661
|
-
merge_type = 'MIX'
|
|
662
|
-
mode = 'MIX'
|
|
663
|
-
if (merge_type != 'MATH' and merge_type != 'GEOMETRY') and tree_type == 'GEOMETRY':
|
|
664
|
-
merge_type = 'AUTO'
|
|
665
|
-
# The Mix node and math nodes used for geometry nodes are of type 'ShaderNode'
|
|
666
|
-
if (merge_type == 'MATH' or merge_type == 'MIX') and tree_type == 'GEOMETRY':
|
|
667
|
-
node_type = 'ShaderNode'
|
|
668
|
-
selected_mix = [] # entry = [index, loc]
|
|
669
|
-
selected_shader = [] # entry = [index, loc]
|
|
670
|
-
selected_geometry = [] # entry = [index, loc]
|
|
671
|
-
selected_math = [] # entry = [index, loc]
|
|
672
|
-
selected_vector = [] # entry = [index, loc]
|
|
673
|
-
selected_z = [] # entry = [index, loc]
|
|
674
|
-
selected_alphaover = [] # entry = [index, loc]
|
|
675
|
-
selected_boolean = [] # entry = [index, loc]
|
|
676
|
-
selected_string = [] # entry = [index, loc]
|
|
677
|
-
|
|
678
|
-
for i, node in enumerate(nodes):
|
|
679
|
-
if node.select and node.outputs:
|
|
680
|
-
output = get_first_enabled_output(node)
|
|
681
|
-
output_type = output.type
|
|
682
|
-
if output_type == 'BOOLEAN':
|
|
683
|
-
if merge_type == 'MATH' and mode != 'ADD':
|
|
684
|
-
merge_type = 'AUTO'
|
|
685
|
-
mode = 'MIX'
|
|
686
|
-
if merge_type == 'AUTO' and mode == 'ADD':
|
|
687
|
-
mode = 'MIX'
|
|
688
|
-
if output_type == 'STRING':
|
|
689
|
-
merge_type = 'AUTO'
|
|
690
|
-
if merge_type == 'AUTO':
|
|
691
|
-
for (type, types_list, dst) in (
|
|
692
|
-
('SHADER', ('MIX', 'ADD'), selected_shader),
|
|
693
|
-
('GEOMETRY', [t[0] for t in geo_combine_operations], selected_geometry),
|
|
694
|
-
('RGBA', [t[0] for t in blend_types], selected_mix),
|
|
695
|
-
('VALUE', [t[0] for t in operations], selected_math),
|
|
696
|
-
('VECTOR', [], selected_vector),
|
|
697
|
-
('BOOLEAN', [], selected_boolean),
|
|
698
|
-
('STRING', [], selected_string),
|
|
699
|
-
):
|
|
700
|
-
valid_mode = mode in types_list
|
|
701
|
-
# When mode is 'MIX' we have to cheat since the mix node is not used in
|
|
702
|
-
# geometry nodes.
|
|
703
|
-
if tree_type == 'GEOMETRY':
|
|
704
|
-
if mode == 'MIX':
|
|
705
|
-
if output_type == 'VALUE' and type == 'VALUE':
|
|
706
|
-
valid_mode = True
|
|
707
|
-
elif output_type == 'VECTOR' and type == 'VECTOR':
|
|
708
|
-
valid_mode = True
|
|
709
|
-
elif type == 'GEOMETRY':
|
|
710
|
-
valid_mode = True
|
|
711
|
-
elif type in ('BOOLEAN', 'STRING'):
|
|
712
|
-
valid_mode = True
|
|
713
|
-
# When mode is 'MIX' use mix node for both 'RGBA' and 'VALUE' output types.
|
|
714
|
-
# Cheat that output type is 'RGBA',
|
|
715
|
-
# and that 'MIX' exists in math operations list.
|
|
716
|
-
# This way when selected_mix list is analyzed:
|
|
717
|
-
# Node data will be appended even though it doesn't meet requirements.
|
|
718
|
-
elif output_type != 'SHADER' and mode == 'MIX':
|
|
719
|
-
output_type = 'RGBA'
|
|
720
|
-
valid_mode = True
|
|
721
|
-
if output_type == type and valid_mode:
|
|
722
|
-
dst.append([i, node.location.x, node.location.y, node.dimensions.x, node.hide])
|
|
723
|
-
else:
|
|
724
|
-
for (type, types_list, dst) in (
|
|
725
|
-
('SHADER', ('MIX', 'ADD'), selected_shader),
|
|
726
|
-
('GEOMETRY', [t[0] for t in geo_combine_operations], selected_geometry),
|
|
727
|
-
('MIX', [t[0] for t in blend_types], selected_mix),
|
|
728
|
-
('MATH', [t[0] for t in operations], selected_math),
|
|
729
|
-
('ZCOMBINE', ('MIX', ), selected_z),
|
|
730
|
-
('ALPHAOVER', ('MIX', ), selected_alphaover),
|
|
731
|
-
('BOOLEAN', (''), selected_boolean),
|
|
732
|
-
):
|
|
733
|
-
if (merge_type == type and mode in types_list):
|
|
734
|
-
dst.append(
|
|
735
|
-
[i, node.location.x, node.location.y, node.dimensions.x, node.hide])
|
|
736
|
-
# When nodes with output kinds 'RGBA' and 'VALUE' are selected at the same time
|
|
737
|
-
# use only 'Mix' nodes for merging.
|
|
738
|
-
# For that we add selected_math list to selected_mix list and clear selected_math.
|
|
739
|
-
if selected_mix and selected_math and merge_type == 'AUTO':
|
|
740
|
-
selected_mix += selected_math
|
|
741
|
-
selected_math = []
|
|
742
|
-
|
|
743
|
-
# If no nodes are selected, do nothing and pass through.
|
|
744
|
-
if not (selected_mix + selected_shader + selected_geometry + selected_math
|
|
745
|
-
+ selected_vector + selected_z + selected_alphaover + selected_boolean + selected_string):
|
|
746
|
-
return {'PASS_THROUGH'}
|
|
747
|
-
|
|
748
|
-
for nodes_list in [
|
|
749
|
-
selected_mix,
|
|
750
|
-
selected_shader,
|
|
751
|
-
selected_geometry,
|
|
752
|
-
selected_math,
|
|
753
|
-
selected_vector,
|
|
754
|
-
selected_z,
|
|
755
|
-
selected_alphaover,
|
|
756
|
-
selected_boolean,
|
|
757
|
-
selected_string]:
|
|
758
|
-
if not nodes_list:
|
|
759
|
-
continue
|
|
760
|
-
count_before = len(nodes)
|
|
761
|
-
# sort list by loc_x - reversed
|
|
762
|
-
nodes_list.sort(key=lambda k: k[1], reverse=True)
|
|
763
|
-
# get maximum loc_x
|
|
764
|
-
loc_x = nodes_list[0][1] + nodes_list[0][3] + 70
|
|
765
|
-
nodes_list.sort(key=lambda k: k[2], reverse=True)
|
|
766
|
-
|
|
767
|
-
# Change the node type for math nodes in a geometry node tree.
|
|
768
|
-
if (
|
|
769
|
-
tree_type == 'GEOMETRY'
|
|
770
|
-
and nodes_list in (selected_math, selected_vector, selected_mix)
|
|
771
|
-
and mode == 'MIX'):
|
|
772
|
-
mode = 'ADD'
|
|
773
|
-
if merge_position == 'CENTER' and len(nodes_list) >= 2:
|
|
774
|
-
# average yloc of last two nodes (lowest two)
|
|
775
|
-
loc_y = ((nodes_list[-1][2]) + (nodes_list[-2][2])) / 2
|
|
776
|
-
if nodes_list[-1][-1]: # if last node is hidden, mix should be shifted up a bit
|
|
777
|
-
if do_hide:
|
|
778
|
-
loc_y += 40
|
|
779
|
-
else:
|
|
780
|
-
loc_y += 80
|
|
781
|
-
else:
|
|
782
|
-
loc_y = nodes_list[-1][2]
|
|
783
|
-
offset_y = 100
|
|
784
|
-
if not do_hide:
|
|
785
|
-
offset_y = 200
|
|
786
|
-
if nodes_list == selected_shader and not do_hide_shader:
|
|
787
|
-
offset_y = 150.0
|
|
788
|
-
the_range = len(nodes_list) - 1
|
|
789
|
-
if len(nodes_list) == 1:
|
|
790
|
-
the_range = 1
|
|
791
|
-
was_multi = False
|
|
792
|
-
for i in range(the_range):
|
|
793
|
-
if nodes_list == selected_mix:
|
|
794
|
-
add = nodes.new('ShaderNodeMix')
|
|
795
|
-
add.data_type = 'RGBA'
|
|
796
|
-
add.blend_type = mode
|
|
797
|
-
if mode != 'MIX':
|
|
798
|
-
add.inputs[0].default_value = 1.0
|
|
799
|
-
add.show_preview = False
|
|
800
|
-
add.hide = do_hide
|
|
801
|
-
if do_hide:
|
|
802
|
-
loc_y = loc_y - 50
|
|
803
|
-
first = 6
|
|
804
|
-
second = 7
|
|
805
|
-
elif nodes_list == selected_math:
|
|
806
|
-
add = nodes.new('ShaderNodeMath')
|
|
807
|
-
add.operation = mode
|
|
808
|
-
add.hide = do_hide
|
|
809
|
-
if do_hide:
|
|
810
|
-
loc_y = loc_y - 50
|
|
811
|
-
first = 0
|
|
812
|
-
second = 1
|
|
813
|
-
elif nodes_list == selected_shader:
|
|
814
|
-
if mode == 'MIX':
|
|
815
|
-
add = nodes.new('ShaderNodeMixShader')
|
|
816
|
-
add.hide = do_hide_shader
|
|
817
|
-
if do_hide_shader:
|
|
818
|
-
loc_y = loc_y - 50
|
|
819
|
-
first = 1
|
|
820
|
-
second = 2
|
|
821
|
-
elif mode == 'ADD':
|
|
822
|
-
add = nodes.new('ShaderNodeAddShader')
|
|
823
|
-
add.hide = do_hide_shader
|
|
824
|
-
if do_hide_shader:
|
|
825
|
-
loc_y = loc_y - 50
|
|
826
|
-
first = 0
|
|
827
|
-
second = 1
|
|
828
|
-
elif nodes_list == selected_geometry:
|
|
829
|
-
if mode in ('JOIN', 'MIX'):
|
|
830
|
-
add_type = 'GeometryNodeJoinGeometry'
|
|
831
|
-
add = self.merge_with_multi_input(
|
|
832
|
-
nodes_list, merge_position, do_hide, loc_x, links, nodes, add_type, [0])
|
|
833
|
-
else:
|
|
834
|
-
add_type = 'GeometryNodeMeshBoolean'
|
|
835
|
-
indices = [0, 1] if mode == 'DIFFERENCE' else [1]
|
|
836
|
-
add = self.merge_with_multi_input(
|
|
837
|
-
nodes_list, merge_position, do_hide, loc_x, links, nodes, add_type, indices)
|
|
838
|
-
add.operation = mode
|
|
839
|
-
was_multi = True
|
|
840
|
-
break
|
|
841
|
-
elif nodes_list == selected_vector:
|
|
842
|
-
add = nodes.new('ShaderNodeVectorMath')
|
|
843
|
-
add.operation = mode
|
|
844
|
-
add.hide = do_hide
|
|
845
|
-
if do_hide:
|
|
846
|
-
loc_y = loc_y - 50
|
|
847
|
-
first = 0
|
|
848
|
-
second = 1
|
|
849
|
-
elif nodes_list == selected_z:
|
|
850
|
-
add = nodes.new('CompositorNodeZcombine')
|
|
851
|
-
add.show_preview = False
|
|
852
|
-
add.hide = do_hide
|
|
853
|
-
if do_hide:
|
|
854
|
-
loc_y = loc_y - 50
|
|
855
|
-
first = 0
|
|
856
|
-
second = 2
|
|
857
|
-
elif nodes_list == selected_alphaover:
|
|
858
|
-
add = nodes.new('CompositorNodeAlphaOver')
|
|
859
|
-
add.show_preview = False
|
|
860
|
-
add.hide = do_hide
|
|
861
|
-
if do_hide:
|
|
862
|
-
loc_y = loc_y - 50
|
|
863
|
-
first = 1
|
|
864
|
-
second = 2
|
|
865
|
-
elif nodes_list == selected_boolean:
|
|
866
|
-
add = nodes.new('FunctionNodeBooleanMath')
|
|
867
|
-
add.show_preview = False
|
|
868
|
-
add.hide = do_hide
|
|
869
|
-
if do_hide:
|
|
870
|
-
loc_y = loc_y - 50
|
|
871
|
-
first = 0
|
|
872
|
-
second = 1
|
|
873
|
-
elif nodes_list == selected_string:
|
|
874
|
-
add_type = node_type + 'StringJoin'
|
|
875
|
-
add = self.merge_with_multi_input(
|
|
876
|
-
nodes_list, merge_position, do_hide, loc_x, links, nodes, add_type, [1])
|
|
877
|
-
was_multi = True
|
|
878
|
-
break # this line is here in case more types get added in the future
|
|
879
|
-
add.location = loc_x, loc_y
|
|
880
|
-
loc_y += offset_y
|
|
881
|
-
add.select = True
|
|
882
|
-
|
|
883
|
-
# This has already been handled separately
|
|
884
|
-
if was_multi:
|
|
885
|
-
continue
|
|
886
|
-
count_adds = i + 1
|
|
887
|
-
count_after = len(nodes)
|
|
888
|
-
index = count_after - 1
|
|
889
|
-
first_selected = nodes[nodes_list[0][0]]
|
|
890
|
-
# "last" node has been added as first, so its index is count_before.
|
|
891
|
-
last_add = nodes[count_before]
|
|
892
|
-
# Create list of invalid indexes.
|
|
893
|
-
invalid_nodes = [nodes[n[0]]
|
|
894
|
-
for n in (selected_mix + selected_math + selected_shader + selected_z + selected_geometry)]
|
|
895
|
-
|
|
896
|
-
# Special case:
|
|
897
|
-
# Two nodes were selected and first selected has no output links, second selected has output links.
|
|
898
|
-
# Then add links from last add to all links 'to_socket' of out links of second selected.
|
|
899
|
-
first_selected_output = get_first_enabled_output(first_selected)
|
|
900
|
-
if len(nodes_list) == 2:
|
|
901
|
-
if not first_selected_output.links:
|
|
902
|
-
second_selected = nodes[nodes_list[1][0]]
|
|
903
|
-
for ss_link in get_first_enabled_output(second_selected).links:
|
|
904
|
-
# Prevent cyclic dependencies when nodes to be merged are linked to one another.
|
|
905
|
-
# Link only if "to_node" index not in invalid indexes list.
|
|
906
|
-
if not self.link_creates_cycle(ss_link, invalid_nodes):
|
|
907
|
-
connect_sockets(get_first_enabled_output(last_add), ss_link.to_socket)
|
|
908
|
-
# add links from last_add to all links 'to_socket' of out links of first selected.
|
|
909
|
-
for fs_link in first_selected_output.links:
|
|
910
|
-
# Link only if "to_node" index not in invalid indexes list.
|
|
911
|
-
if not self.link_creates_cycle(fs_link, invalid_nodes):
|
|
912
|
-
connect_sockets(get_first_enabled_output(last_add), fs_link.to_socket)
|
|
913
|
-
# add link from "first" selected and "first" add node
|
|
914
|
-
node_to = nodes[count_after - 1]
|
|
915
|
-
connect_sockets(first_selected_output, node_to.inputs[first])
|
|
916
|
-
if node_to.type == 'ZCOMBINE':
|
|
917
|
-
for fs_out in first_selected.outputs:
|
|
918
|
-
if fs_out != first_selected_output and fs_out.name in ('Z', 'Depth'):
|
|
919
|
-
connect_sockets(fs_out, node_to.inputs[1])
|
|
920
|
-
break
|
|
921
|
-
# add links between added ADD nodes and between selected and ADD nodes
|
|
922
|
-
for i in range(count_adds):
|
|
923
|
-
if i < count_adds - 1:
|
|
924
|
-
node_from = nodes[index]
|
|
925
|
-
node_to = nodes[index - 1]
|
|
926
|
-
node_to_input_i = first
|
|
927
|
-
node_to_z_i = 1 # if z combine - link z to first z input
|
|
928
|
-
connect_sockets(get_first_enabled_output(node_from), node_to.inputs[node_to_input_i])
|
|
929
|
-
if node_to.type == 'ZCOMBINE':
|
|
930
|
-
for from_out in node_from.outputs:
|
|
931
|
-
if from_out != get_first_enabled_output(node_from) and from_out.name in ('Z', 'Depth'):
|
|
932
|
-
connect_sockets(from_out, node_to.inputs[node_to_z_i])
|
|
933
|
-
if len(nodes_list) > 1:
|
|
934
|
-
node_from = nodes[nodes_list[i + 1][0]]
|
|
935
|
-
node_to = nodes[index]
|
|
936
|
-
node_to_input_i = second
|
|
937
|
-
node_to_z_i = 3 # if z combine - link z to second z input
|
|
938
|
-
connect_sockets(get_first_enabled_output(node_from), node_to.inputs[node_to_input_i])
|
|
939
|
-
if node_to.type == 'ZCOMBINE':
|
|
940
|
-
for from_out in node_from.outputs:
|
|
941
|
-
if from_out != get_first_enabled_output(node_from) and from_out.name in ('Z', 'Depth'):
|
|
942
|
-
connect_sockets(from_out, node_to.inputs[node_to_z_i])
|
|
943
|
-
index -= 1
|
|
944
|
-
# set "last" of added nodes as active
|
|
945
|
-
nodes.active = last_add
|
|
946
|
-
for i, x, y, dx, h in nodes_list:
|
|
947
|
-
nodes[i].select = False
|
|
948
|
-
|
|
949
|
-
return {'FINISHED'}
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
class NWBatchChangeNodes(Operator, NWBase):
|
|
953
|
-
bl_idname = "node.nw_batch_change"
|
|
954
|
-
bl_label = "Batch Change"
|
|
955
|
-
bl_description = "Batch change blend type and math operation"
|
|
956
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
957
|
-
|
|
958
|
-
blend_type: EnumProperty(
|
|
959
|
-
name="Blend Type",
|
|
960
|
-
items=blend_types + navs,
|
|
961
|
-
)
|
|
962
|
-
operation: EnumProperty(
|
|
963
|
-
name="Operation",
|
|
964
|
-
translation_context=i18n_contexts.id_nodetree,
|
|
965
|
-
items=operations + navs,
|
|
966
|
-
)
|
|
967
|
-
|
|
968
|
-
@classmethod
|
|
969
|
-
def poll(cls, context):
|
|
970
|
-
return (nw_check(cls, context)
|
|
971
|
-
and nw_check_space_type(cls, context, {'ShaderNodeTree', 'CompositorNodeTree',
|
|
972
|
-
'TextureNodeTree', 'GeometryNodeTree'})
|
|
973
|
-
and nw_check_selected(cls, context))
|
|
974
|
-
|
|
975
|
-
def execute(self, context):
|
|
976
|
-
blend_type = self.blend_type
|
|
977
|
-
operation = self.operation
|
|
978
|
-
for node in context.selected_nodes:
|
|
979
|
-
if node.type == 'MIX_RGB' or (node.bl_idname == 'ShaderNodeMix' and node.data_type == 'RGBA'):
|
|
980
|
-
if blend_type not in [nav[0] for nav in navs]:
|
|
981
|
-
node.blend_type = blend_type
|
|
982
|
-
else:
|
|
983
|
-
if blend_type == 'NEXT':
|
|
984
|
-
index = [i for i, entry in enumerate(blend_types) if node.blend_type in entry][0]
|
|
985
|
-
# index = blend_types.index(node.blend_type)
|
|
986
|
-
if index == len(blend_types) - 1:
|
|
987
|
-
node.blend_type = blend_types[0][0]
|
|
988
|
-
else:
|
|
989
|
-
node.blend_type = blend_types[index + 1][0]
|
|
990
|
-
|
|
991
|
-
if blend_type == 'PREV':
|
|
992
|
-
index = [i for i, entry in enumerate(blend_types) if node.blend_type in entry][0]
|
|
993
|
-
if index == 0:
|
|
994
|
-
node.blend_type = blend_types[len(blend_types) - 1][0]
|
|
995
|
-
else:
|
|
996
|
-
node.blend_type = blend_types[index - 1][0]
|
|
997
|
-
|
|
998
|
-
if node.type == 'MATH' or node.bl_idname == 'ShaderNodeMath':
|
|
999
|
-
if operation not in [nav[0] for nav in navs]:
|
|
1000
|
-
node.operation = operation
|
|
1001
|
-
else:
|
|
1002
|
-
if operation == 'NEXT':
|
|
1003
|
-
index = [i for i, entry in enumerate(operations) if node.operation in entry][0]
|
|
1004
|
-
# index = operations.index(node.operation)
|
|
1005
|
-
if index == len(operations) - 1:
|
|
1006
|
-
node.operation = operations[0][0]
|
|
1007
|
-
else:
|
|
1008
|
-
node.operation = operations[index + 1][0]
|
|
1009
|
-
|
|
1010
|
-
if operation == 'PREV':
|
|
1011
|
-
index = [i for i, entry in enumerate(operations) if node.operation in entry][0]
|
|
1012
|
-
# index = operations.index(node.operation)
|
|
1013
|
-
if index == 0:
|
|
1014
|
-
node.operation = operations[len(operations) - 1][0]
|
|
1015
|
-
else:
|
|
1016
|
-
node.operation = operations[index - 1][0]
|
|
1017
|
-
|
|
1018
|
-
return {'FINISHED'}
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
class NWChangeMixFactor(Operator, NWBase):
|
|
1022
|
-
bl_idname = "node.nw_factor"
|
|
1023
|
-
bl_label = "Change Factor"
|
|
1024
|
-
bl_description = "Change factors of Mix nodes and Mix Shader nodes"
|
|
1025
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
1026
|
-
|
|
1027
|
-
@classmethod
|
|
1028
|
-
def poll(cls, context):
|
|
1029
|
-
return nw_check(cls, context) and nw_check_selected(cls, context)
|
|
1030
|
-
|
|
1031
|
-
# option: Change factor.
|
|
1032
|
-
# If option is 1.0 or 0.0 - set to 1.0 or 0.0
|
|
1033
|
-
# Else - change factor by option value.
|
|
1034
|
-
option: FloatProperty()
|
|
1035
|
-
|
|
1036
|
-
def execute(self, context):
|
|
1037
|
-
nodes, links = get_nodes_links(context)
|
|
1038
|
-
option = self.option
|
|
1039
|
-
selected = [] # entry = index
|
|
1040
|
-
for si, node in enumerate(nodes):
|
|
1041
|
-
if node.select:
|
|
1042
|
-
if node.type in {'MIX_RGB', 'MIX_SHADER'} or node.bl_idname == 'ShaderNodeMix':
|
|
1043
|
-
selected.append(si)
|
|
1044
|
-
|
|
1045
|
-
for si in selected:
|
|
1046
|
-
fac = nodes[si].inputs[0]
|
|
1047
|
-
nodes[si].hide = False
|
|
1048
|
-
if option in {0.0, 1.0}:
|
|
1049
|
-
fac.default_value = option
|
|
1050
|
-
else:
|
|
1051
|
-
fac.default_value += option
|
|
1052
|
-
|
|
1053
|
-
return {'FINISHED'}
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
class NWCopySettings(Operator, NWBase):
|
|
1057
|
-
bl_idname = "node.nw_copy_settings"
|
|
1058
|
-
bl_label = "Copy Settings"
|
|
1059
|
-
bl_description = "Copy settings from active to selected nodes"
|
|
1060
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
1061
|
-
|
|
1062
|
-
@classmethod
|
|
1063
|
-
def poll(cls, context):
|
|
1064
|
-
return (nw_check(cls, context)
|
|
1065
|
-
and nw_check_active(cls, context)
|
|
1066
|
-
and nw_check_selected(cls, context, min=2)
|
|
1067
|
-
and nw_check_node_type(cls, context, 'FRAME', invert=True))
|
|
1068
|
-
|
|
1069
|
-
def execute(self, context):
|
|
1070
|
-
node_active = context.active_node
|
|
1071
|
-
node_selected = context.selected_nodes
|
|
1072
|
-
selected_node_names = [n.name for n in node_selected]
|
|
1073
|
-
|
|
1074
|
-
# Get nodes in selection by type
|
|
1075
|
-
valid_nodes = [n for n in node_selected if n.type == node_active.type]
|
|
1076
|
-
|
|
1077
|
-
if not (len(valid_nodes) > 1) and node_active:
|
|
1078
|
-
self.report({'ERROR'}, rpt_("Selected nodes are not of the same type as {}").format(node_active.name))
|
|
1079
|
-
return {'CANCELLED'}
|
|
1080
|
-
|
|
1081
|
-
if len(valid_nodes) != len(node_selected):
|
|
1082
|
-
# Report nodes that are not valid
|
|
1083
|
-
valid_node_names = [n.name for n in valid_nodes]
|
|
1084
|
-
invalid_names = set(selected_node_names) - set(valid_node_names)
|
|
1085
|
-
message = rpt_("Ignored {} (not of the same type as {})").format(
|
|
1086
|
-
", ".join(sorted(invalid_names)),
|
|
1087
|
-
node_active.name,
|
|
1088
|
-
)
|
|
1089
|
-
self.report({'INFO'}, message)
|
|
1090
|
-
|
|
1091
|
-
# Reference original
|
|
1092
|
-
orig = node_active
|
|
1093
|
-
# node_selected_names = [n.name for n in node_selected]
|
|
1094
|
-
|
|
1095
|
-
# Output list
|
|
1096
|
-
success_names = []
|
|
1097
|
-
|
|
1098
|
-
# Deselect all nodes
|
|
1099
|
-
for i in node_selected:
|
|
1100
|
-
i.select = False
|
|
1101
|
-
|
|
1102
|
-
# Code by zeffii from http://blender.stackexchange.com/a/42338/3710
|
|
1103
|
-
# Run through all other nodes
|
|
1104
|
-
for node in valid_nodes[1:]:
|
|
1105
|
-
|
|
1106
|
-
# Check for frame node
|
|
1107
|
-
parent = node.parent if node.parent else None
|
|
1108
|
-
node_loc = [node.location.x, node.location.y]
|
|
1109
|
-
|
|
1110
|
-
# Select original to duplicate
|
|
1111
|
-
orig.select = True
|
|
1112
|
-
|
|
1113
|
-
# Duplicate selected node
|
|
1114
|
-
bpy.ops.node.duplicate()
|
|
1115
|
-
new_node = context.selected_nodes[0]
|
|
1116
|
-
|
|
1117
|
-
# Deselect copy
|
|
1118
|
-
new_node.select = False
|
|
1119
|
-
|
|
1120
|
-
# Properties to copy
|
|
1121
|
-
node_tree = node.id_data
|
|
1122
|
-
props_to_copy = 'bl_idname name location height width'.split(' ')
|
|
1123
|
-
|
|
1124
|
-
# Input and outputs
|
|
1125
|
-
reconnections = []
|
|
1126
|
-
mappings = chain.from_iterable([node.inputs, node.outputs])
|
|
1127
|
-
for i in (i for i in mappings if i.is_linked):
|
|
1128
|
-
for L in i.links:
|
|
1129
|
-
reconnections.append([L.from_socket.path_from_id(), L.to_socket.path_from_id()])
|
|
1130
|
-
|
|
1131
|
-
# Properties
|
|
1132
|
-
props = {j: getattr(node, j) for j in props_to_copy}
|
|
1133
|
-
props_to_copy.pop(0)
|
|
1134
|
-
|
|
1135
|
-
for prop in props_to_copy:
|
|
1136
|
-
setattr(new_node, prop, props[prop])
|
|
1137
|
-
|
|
1138
|
-
# Get the node tree to remove the old node
|
|
1139
|
-
nodes = node_tree.nodes
|
|
1140
|
-
nodes.remove(node)
|
|
1141
|
-
new_node.name = props['name']
|
|
1142
|
-
|
|
1143
|
-
if parent:
|
|
1144
|
-
new_node.parent = parent
|
|
1145
|
-
new_node.location = node_loc
|
|
1146
|
-
|
|
1147
|
-
for str_from, str_to in reconnections:
|
|
1148
|
-
connect_sockets(eval(str_from), eval(str_to))
|
|
1149
|
-
|
|
1150
|
-
success_names.append(new_node.name)
|
|
1151
|
-
|
|
1152
|
-
orig.select = True
|
|
1153
|
-
node_tree.nodes.active = orig
|
|
1154
|
-
message = rpt_("Successfully copied attributes from {} to {}").format(
|
|
1155
|
-
orig.name,
|
|
1156
|
-
", ".join(success_names)
|
|
1157
|
-
)
|
|
1158
|
-
self.report({'INFO'}, message)
|
|
1159
|
-
return {'FINISHED'}
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
class NWCopyLabel(Operator, NWBase):
|
|
1163
|
-
bl_idname = "node.nw_copy_label"
|
|
1164
|
-
bl_label = "Copy Label"
|
|
1165
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
1166
|
-
bl_description = "Copy label from active to selected nodes"
|
|
1167
|
-
|
|
1168
|
-
option: EnumProperty(
|
|
1169
|
-
name="Option",
|
|
1170
|
-
description="Source of name of label",
|
|
1171
|
-
items=(
|
|
1172
|
-
('FROM_ACTIVE', 'From Active', 'From active node',),
|
|
1173
|
-
('FROM_NODE', 'From Node', 'From node linked to selected node'),
|
|
1174
|
-
('FROM_SOCKET', 'From Socket', 'From socket linked to selected node'),
|
|
1175
|
-
)
|
|
1176
|
-
)
|
|
1177
|
-
|
|
1178
|
-
@classmethod
|
|
1179
|
-
def poll(cls, context):
|
|
1180
|
-
return nw_check(cls, context) and nw_check_selected(cls, context, min=2)
|
|
1181
|
-
|
|
1182
|
-
def execute(self, context):
|
|
1183
|
-
nodes, links = get_nodes_links(context)
|
|
1184
|
-
option = self.option
|
|
1185
|
-
active = nodes.active
|
|
1186
|
-
if option == 'FROM_ACTIVE':
|
|
1187
|
-
if active:
|
|
1188
|
-
src_label = active.label
|
|
1189
|
-
for node in [n for n in nodes if n.select and nodes.active != n]:
|
|
1190
|
-
node.label = src_label
|
|
1191
|
-
elif option == 'FROM_NODE':
|
|
1192
|
-
selected = [n for n in nodes if n.select]
|
|
1193
|
-
for node in selected:
|
|
1194
|
-
for input in node.inputs:
|
|
1195
|
-
if input.links:
|
|
1196
|
-
src = input.links[0].from_node
|
|
1197
|
-
node.label = src.label
|
|
1198
|
-
break
|
|
1199
|
-
elif option == 'FROM_SOCKET':
|
|
1200
|
-
selected = [n for n in nodes if n.select]
|
|
1201
|
-
for node in selected:
|
|
1202
|
-
for input in node.inputs:
|
|
1203
|
-
if input.links:
|
|
1204
|
-
src = input.links[0].from_socket
|
|
1205
|
-
node.label = src.name
|
|
1206
|
-
break
|
|
1207
|
-
|
|
1208
|
-
return {'FINISHED'}
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
class NWClearLabel(Operator, NWBase):
|
|
1212
|
-
bl_idname = "node.nw_clear_label"
|
|
1213
|
-
bl_label = "Clear Label"
|
|
1214
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
1215
|
-
bl_description = "Clear labels on selected nodes"
|
|
1216
|
-
|
|
1217
|
-
option: BoolProperty()
|
|
1218
|
-
|
|
1219
|
-
@classmethod
|
|
1220
|
-
def poll(cls, context):
|
|
1221
|
-
return nw_check(cls, context) and nw_check_selected(cls, context)
|
|
1222
|
-
|
|
1223
|
-
def execute(self, context):
|
|
1224
|
-
nodes, links = get_nodes_links(context)
|
|
1225
|
-
for node in [n for n in nodes if n.select]:
|
|
1226
|
-
node.label = ''
|
|
1227
|
-
|
|
1228
|
-
return {'FINISHED'}
|
|
1229
|
-
|
|
1230
|
-
def invoke(self, context, event):
|
|
1231
|
-
if self.option:
|
|
1232
|
-
return self.execute(context)
|
|
1233
|
-
else:
|
|
1234
|
-
return context.window_manager.invoke_confirm(self, event)
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
class NWModifyLabels(Operator, NWBase):
|
|
1238
|
-
"""Modify labels of all selected nodes"""
|
|
1239
|
-
bl_idname = "node.nw_modify_labels"
|
|
1240
|
-
bl_label = "Modify Labels"
|
|
1241
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
1242
|
-
|
|
1243
|
-
prepend: StringProperty(
|
|
1244
|
-
name="Add to Beginning"
|
|
1245
|
-
)
|
|
1246
|
-
append: StringProperty(
|
|
1247
|
-
name="Add to End"
|
|
1248
|
-
)
|
|
1249
|
-
replace_from: StringProperty(
|
|
1250
|
-
name="Text to Replace"
|
|
1251
|
-
)
|
|
1252
|
-
replace_to: StringProperty(
|
|
1253
|
-
name="Replace with"
|
|
1254
|
-
)
|
|
1255
|
-
|
|
1256
|
-
@classmethod
|
|
1257
|
-
def poll(cls, context):
|
|
1258
|
-
return nw_check(cls, context) and nw_check_selected(cls, context)
|
|
1259
|
-
|
|
1260
|
-
def execute(self, context):
|
|
1261
|
-
nodes, links = get_nodes_links(context)
|
|
1262
|
-
for node in [n for n in nodes if n.select]:
|
|
1263
|
-
node.label = self.prepend + node.label.replace(self.replace_from, self.replace_to) + self.append
|
|
1264
|
-
|
|
1265
|
-
return {'FINISHED'}
|
|
1266
|
-
|
|
1267
|
-
def invoke(self, context, event):
|
|
1268
|
-
self.prepend = ""
|
|
1269
|
-
self.append = ""
|
|
1270
|
-
self.remove = ""
|
|
1271
|
-
return context.window_manager.invoke_props_dialog(self)
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
class NWAddTextureSetup(Operator, NWBase):
|
|
1275
|
-
bl_idname = "node.nw_add_texture"
|
|
1276
|
-
bl_label = "Texture Setup"
|
|
1277
|
-
bl_description = "Add texture node setup to selected shaders"
|
|
1278
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
1279
|
-
|
|
1280
|
-
add_mapping: BoolProperty(
|
|
1281
|
-
name="Add Mapping Nodes",
|
|
1282
|
-
description="Create coordinate and mapping nodes for the texture (ignored for selected texture nodes)",
|
|
1283
|
-
default=True)
|
|
1284
|
-
|
|
1285
|
-
@classmethod
|
|
1286
|
-
def poll(cls, context):
|
|
1287
|
-
return (nw_check(cls, context)
|
|
1288
|
-
and nw_check_space_type(cls, context, {'ShaderNodeTree'})
|
|
1289
|
-
and nw_check_selected(cls, context))
|
|
1290
|
-
|
|
1291
|
-
def execute(self, context):
|
|
1292
|
-
nodes, links = get_nodes_links(context)
|
|
1293
|
-
|
|
1294
|
-
texture_types = get_texture_node_types()
|
|
1295
|
-
selected_nodes = [n for n in nodes if n.select]
|
|
1296
|
-
|
|
1297
|
-
for node in selected_nodes:
|
|
1298
|
-
if not node.inputs:
|
|
1299
|
-
continue
|
|
1300
|
-
|
|
1301
|
-
input_index = 0
|
|
1302
|
-
target_input = node.inputs[0]
|
|
1303
|
-
for input in node.inputs:
|
|
1304
|
-
if input.enabled:
|
|
1305
|
-
input_index += 1
|
|
1306
|
-
if not input.is_linked:
|
|
1307
|
-
target_input = input
|
|
1308
|
-
break
|
|
1309
|
-
else:
|
|
1310
|
-
self.report({'WARNING'}, rpt_("No free inputs for node {}").format(node.name))
|
|
1311
|
-
continue
|
|
1312
|
-
|
|
1313
|
-
x_offset = 0
|
|
1314
|
-
padding = 40.0
|
|
1315
|
-
locx = node.location.x
|
|
1316
|
-
locy = node.location.y - (input_index * padding)
|
|
1317
|
-
|
|
1318
|
-
is_texture_node = node.rna_type.identifier in texture_types
|
|
1319
|
-
use_environment_texture = node.type == 'BACKGROUND'
|
|
1320
|
-
|
|
1321
|
-
# Add an image texture before normal shader nodes.
|
|
1322
|
-
if not is_texture_node:
|
|
1323
|
-
image_texture_type = 'ShaderNodeTexEnvironment' if use_environment_texture else 'ShaderNodeTexImage'
|
|
1324
|
-
image_texture_node = nodes.new(image_texture_type)
|
|
1325
|
-
x_offset = x_offset + image_texture_node.width + padding
|
|
1326
|
-
image_texture_node.location = [locx - x_offset, locy]
|
|
1327
|
-
nodes.active = image_texture_node
|
|
1328
|
-
connect_sockets(image_texture_node.outputs[0], target_input)
|
|
1329
|
-
|
|
1330
|
-
# The mapping setup following this will connect to the first input of this image texture.
|
|
1331
|
-
target_input = image_texture_node.inputs[0]
|
|
1332
|
-
|
|
1333
|
-
node.select = False
|
|
1334
|
-
|
|
1335
|
-
if is_texture_node or self.add_mapping:
|
|
1336
|
-
# Add Mapping node.
|
|
1337
|
-
mapping_node = nodes.new('ShaderNodeMapping')
|
|
1338
|
-
x_offset = x_offset + mapping_node.width + padding
|
|
1339
|
-
mapping_node.location = [locx - x_offset, locy]
|
|
1340
|
-
connect_sockets(mapping_node.outputs[0], target_input)
|
|
1341
|
-
|
|
1342
|
-
# Add Texture Coordinates node.
|
|
1343
|
-
tex_coord_node = nodes.new('ShaderNodeTexCoord')
|
|
1344
|
-
x_offset = x_offset + tex_coord_node.width + padding
|
|
1345
|
-
tex_coord_node.location = [locx - x_offset, locy]
|
|
1346
|
-
|
|
1347
|
-
is_procedural_texture = is_texture_node and node.type != 'TEX_IMAGE'
|
|
1348
|
-
use_generated_coordinates = is_procedural_texture or use_environment_texture
|
|
1349
|
-
tex_coord_output = tex_coord_node.outputs[0 if use_generated_coordinates else 2]
|
|
1350
|
-
connect_sockets(tex_coord_output, mapping_node.inputs[0])
|
|
1351
|
-
|
|
1352
|
-
return {'FINISHED'}
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
class NWAddPrincipledSetup(Operator, NWBase, ImportHelper):
|
|
1356
|
-
bl_idname = "node.nw_add_textures_for_principled"
|
|
1357
|
-
bl_label = "Principled Texture Setup"
|
|
1358
|
-
bl_description = "Add texture node setup for Principled BSDF"
|
|
1359
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
1360
|
-
|
|
1361
|
-
directory: StringProperty(
|
|
1362
|
-
name='Directory',
|
|
1363
|
-
subtype='DIR_PATH',
|
|
1364
|
-
default='',
|
|
1365
|
-
description='Folder to search in for image files'
|
|
1366
|
-
)
|
|
1367
|
-
files: CollectionProperty(
|
|
1368
|
-
type=bpy.types.OperatorFileListElement,
|
|
1369
|
-
options={'HIDDEN', 'SKIP_SAVE'}
|
|
1370
|
-
)
|
|
1371
|
-
|
|
1372
|
-
relative_path: BoolProperty(
|
|
1373
|
-
name='Relative Path',
|
|
1374
|
-
description='Set the file path relative to the blend file, when possible',
|
|
1375
|
-
default=True
|
|
1376
|
-
)
|
|
1377
|
-
|
|
1378
|
-
order = [
|
|
1379
|
-
"filepath",
|
|
1380
|
-
"files",
|
|
1381
|
-
]
|
|
1382
|
-
|
|
1383
|
-
def draw(self, context):
|
|
1384
|
-
layout = self.layout
|
|
1385
|
-
layout.alignment = 'LEFT'
|
|
1386
|
-
|
|
1387
|
-
layout.prop(self, 'relative_path')
|
|
1388
|
-
|
|
1389
|
-
@classmethod
|
|
1390
|
-
def poll(cls, context):
|
|
1391
|
-
return (nw_check(cls, context)
|
|
1392
|
-
and nw_check_active(cls, context)
|
|
1393
|
-
and nw_check_space_type(cls, context, {'ShaderNodeTree'})
|
|
1394
|
-
and nw_check_node_type(cls, context, 'BSDF_PRINCIPLED'))
|
|
1395
|
-
|
|
1396
|
-
def execute(self, context):
|
|
1397
|
-
# Check if everything is ok
|
|
1398
|
-
if not self.directory:
|
|
1399
|
-
self.report({'INFO'}, 'No folder selected')
|
|
1400
|
-
return {'CANCELLED'}
|
|
1401
|
-
if not self.files[:]:
|
|
1402
|
-
self.report({'INFO'}, 'No files selected')
|
|
1403
|
-
return {'CANCELLED'}
|
|
1404
|
-
|
|
1405
|
-
nodes, links = get_nodes_links(context)
|
|
1406
|
-
active_node = nodes.active
|
|
1407
|
-
|
|
1408
|
-
# Filter textures names for texturetypes in filenames
|
|
1409
|
-
# [Socket Name, [abbreviations and keyword list], Filename placeholder]
|
|
1410
|
-
tags = context.preferences.addons[__package__].preferences.principled_tags
|
|
1411
|
-
normal_abbr = tags.normal.split(' ')
|
|
1412
|
-
bump_abbr = tags.bump.split(' ')
|
|
1413
|
-
gloss_abbr = tags.gloss.split(' ')
|
|
1414
|
-
rough_abbr = tags.rough.split(' ')
|
|
1415
|
-
socketnames = [
|
|
1416
|
-
['Displacement', tags.displacement.split(' '), None],
|
|
1417
|
-
['Base Color', tags.base_color.split(' '), None],
|
|
1418
|
-
['Metallic', tags.metallic.split(' '), None],
|
|
1419
|
-
['Specular IOR Level', tags.specular.split(' '), None],
|
|
1420
|
-
['Roughness', rough_abbr + gloss_abbr, None],
|
|
1421
|
-
['Bump', bump_abbr, None],
|
|
1422
|
-
['Normal', normal_abbr, None],
|
|
1423
|
-
['Transmission Weight', tags.transmission.split(' '), None],
|
|
1424
|
-
['Emission Color', tags.emission.split(' '), None],
|
|
1425
|
-
['Alpha', tags.alpha.split(' '), None],
|
|
1426
|
-
['Ambient Occlusion', tags.ambient_occlusion.split(' '), None],
|
|
1427
|
-
]
|
|
1428
|
-
|
|
1429
|
-
match_files_to_socket_names(self.files, socketnames)
|
|
1430
|
-
# Remove socketnames without found files
|
|
1431
|
-
socketnames = [s for s in socketnames if s[2]
|
|
1432
|
-
and path.exists(bpy.path.abspath(self.directory) + s[2])]
|
|
1433
|
-
if not socketnames:
|
|
1434
|
-
self.report({'INFO'}, 'No matching images found')
|
|
1435
|
-
print('No matching images found')
|
|
1436
|
-
return {'CANCELLED'}
|
|
1437
|
-
|
|
1438
|
-
# Don't override path earlier as os.path is used to check the absolute path
|
|
1439
|
-
import_path = self.directory
|
|
1440
|
-
if self.relative_path:
|
|
1441
|
-
if bpy.data.filepath:
|
|
1442
|
-
try:
|
|
1443
|
-
import_path = bpy.path.relpath(self.directory)
|
|
1444
|
-
except ValueError:
|
|
1445
|
-
pass
|
|
1446
|
-
|
|
1447
|
-
# Add found images
|
|
1448
|
-
print('\nMatched Textures:')
|
|
1449
|
-
texture_nodes = []
|
|
1450
|
-
disp_texture = None
|
|
1451
|
-
ao_texture = None
|
|
1452
|
-
normal_node = None
|
|
1453
|
-
normal_node_texture = None
|
|
1454
|
-
bump_node = None
|
|
1455
|
-
bump_node_texture = None
|
|
1456
|
-
roughness_node = None
|
|
1457
|
-
for i, sname in enumerate(socketnames):
|
|
1458
|
-
print(i, sname[0], sname[2])
|
|
1459
|
-
|
|
1460
|
-
# DISPLACEMENT NODES
|
|
1461
|
-
if sname[0] == 'Displacement':
|
|
1462
|
-
disp_texture = nodes.new(type='ShaderNodeTexImage')
|
|
1463
|
-
img = bpy.data.images.load(path.join(import_path, sname[2]))
|
|
1464
|
-
disp_texture.image = img
|
|
1465
|
-
disp_texture.label = 'Displacement'
|
|
1466
|
-
if disp_texture.image:
|
|
1467
|
-
disp_texture.image.colorspace_settings.is_data = True
|
|
1468
|
-
|
|
1469
|
-
# Add displacement offset nodes
|
|
1470
|
-
disp_node = nodes.new(type='ShaderNodeDisplacement')
|
|
1471
|
-
# Align the Displacement node under the active Principled BSDF node
|
|
1472
|
-
disp_node.location = active_node.location + Vector((100, -700))
|
|
1473
|
-
link = connect_sockets(disp_node.inputs[0], disp_texture.outputs[0])
|
|
1474
|
-
|
|
1475
|
-
# TODO Turn on true displacement in the material
|
|
1476
|
-
# Too complicated for now
|
|
1477
|
-
|
|
1478
|
-
# Find output node
|
|
1479
|
-
output_node = [n for n in nodes if n.bl_idname == 'ShaderNodeOutputMaterial']
|
|
1480
|
-
if output_node:
|
|
1481
|
-
if not output_node[0].inputs[2].is_linked:
|
|
1482
|
-
link = connect_sockets(output_node[0].inputs[2], disp_node.outputs[0])
|
|
1483
|
-
|
|
1484
|
-
continue
|
|
1485
|
-
|
|
1486
|
-
# BUMP NODES
|
|
1487
|
-
elif sname[0] == 'Bump':
|
|
1488
|
-
# Test if new texture node is bump map
|
|
1489
|
-
fname_components = split_into_components(sname[2])
|
|
1490
|
-
match_bump = set(bump_abbr).intersection(set(fname_components))
|
|
1491
|
-
if match_bump:
|
|
1492
|
-
# If Bump add bump node in between
|
|
1493
|
-
bump_node_texture = nodes.new(type='ShaderNodeTexImage')
|
|
1494
|
-
img = bpy.data.images.load(path.join(import_path, sname[2]))
|
|
1495
|
-
img.colorspace_settings.is_data = True
|
|
1496
|
-
bump_node_texture.image = img
|
|
1497
|
-
bump_node_texture.label = 'Bump'
|
|
1498
|
-
|
|
1499
|
-
# Add bump node
|
|
1500
|
-
bump_node = nodes.new(type='ShaderNodeBump')
|
|
1501
|
-
link = connect_sockets(bump_node.inputs[3], bump_node_texture.outputs[0])
|
|
1502
|
-
link = connect_sockets(active_node.inputs['Normal'], bump_node.outputs[0])
|
|
1503
|
-
continue
|
|
1504
|
-
|
|
1505
|
-
# NORMAL NODES
|
|
1506
|
-
elif sname[0] == 'Normal':
|
|
1507
|
-
# Test if new texture node is normal map
|
|
1508
|
-
fname_components = split_into_components(sname[2])
|
|
1509
|
-
match_normal = set(normal_abbr).intersection(set(fname_components))
|
|
1510
|
-
if match_normal:
|
|
1511
|
-
# If Normal add normal node in between
|
|
1512
|
-
normal_node_texture = nodes.new(type='ShaderNodeTexImage')
|
|
1513
|
-
img = bpy.data.images.load(path.join(import_path, sname[2]))
|
|
1514
|
-
img.colorspace_settings.is_data = True
|
|
1515
|
-
normal_node_texture.image = img
|
|
1516
|
-
normal_node_texture.label = 'Normal'
|
|
1517
|
-
|
|
1518
|
-
# Add normal node
|
|
1519
|
-
normal_node = nodes.new(type='ShaderNodeNormalMap')
|
|
1520
|
-
link = connect_sockets(normal_node.inputs[1], normal_node_texture.outputs[0])
|
|
1521
|
-
# Connect to bump node if it was created before, otherwise to the BSDF
|
|
1522
|
-
if bump_node is None:
|
|
1523
|
-
link = connect_sockets(active_node.inputs[sname[0]], normal_node.outputs[0])
|
|
1524
|
-
else:
|
|
1525
|
-
link = connect_sockets(bump_node.inputs[sname[0]], normal_node.outputs[sname[0]])
|
|
1526
|
-
continue
|
|
1527
|
-
|
|
1528
|
-
# AMBIENT OCCLUSION TEXTURE
|
|
1529
|
-
elif sname[0] == 'Ambient Occlusion':
|
|
1530
|
-
ao_texture = nodes.new(type='ShaderNodeTexImage')
|
|
1531
|
-
img = bpy.data.images.load(path.join(import_path, sname[2]))
|
|
1532
|
-
ao_texture.image = img
|
|
1533
|
-
ao_texture.label = sname[0]
|
|
1534
|
-
if ao_texture.image:
|
|
1535
|
-
ao_texture.image.colorspace_settings.is_data = True
|
|
1536
|
-
|
|
1537
|
-
continue
|
|
1538
|
-
|
|
1539
|
-
if not active_node.inputs[sname[0]].is_linked:
|
|
1540
|
-
# No texture node connected -> add texture node with new image
|
|
1541
|
-
texture_node = nodes.new(type='ShaderNodeTexImage')
|
|
1542
|
-
img = bpy.data.images.load(path.join(import_path, sname[2]))
|
|
1543
|
-
texture_node.image = img
|
|
1544
|
-
|
|
1545
|
-
if sname[0] == 'Roughness':
|
|
1546
|
-
# Test if glossy or roughness map
|
|
1547
|
-
fname_components = split_into_components(sname[2])
|
|
1548
|
-
match_rough = set(rough_abbr).intersection(set(fname_components))
|
|
1549
|
-
match_gloss = set(gloss_abbr).intersection(set(fname_components))
|
|
1550
|
-
|
|
1551
|
-
if match_rough:
|
|
1552
|
-
# If Roughness nothing to to
|
|
1553
|
-
link = connect_sockets(active_node.inputs[sname[0]], texture_node.outputs[0])
|
|
1554
|
-
|
|
1555
|
-
elif match_gloss:
|
|
1556
|
-
# If Gloss Map add invert node
|
|
1557
|
-
invert_node = nodes.new(type='ShaderNodeInvert')
|
|
1558
|
-
link = connect_sockets(invert_node.inputs[1], texture_node.outputs[0])
|
|
1559
|
-
|
|
1560
|
-
link = connect_sockets(active_node.inputs[sname[0]], invert_node.outputs[0])
|
|
1561
|
-
roughness_node = texture_node
|
|
1562
|
-
|
|
1563
|
-
else:
|
|
1564
|
-
# This is a simple connection Texture --> Input slot
|
|
1565
|
-
link = connect_sockets(active_node.inputs[sname[0]], texture_node.outputs[0])
|
|
1566
|
-
|
|
1567
|
-
# Use non-color except for color inputs
|
|
1568
|
-
if sname[0] not in ['Base Color', 'Emission Color'] and texture_node.image:
|
|
1569
|
-
texture_node.image.colorspace_settings.is_data = True
|
|
1570
|
-
|
|
1571
|
-
else:
|
|
1572
|
-
# If already texture connected. add to node list for alignment
|
|
1573
|
-
texture_node = active_node.inputs[sname[0]].links[0].from_node
|
|
1574
|
-
|
|
1575
|
-
# This are all connected texture nodes
|
|
1576
|
-
texture_nodes.append(texture_node)
|
|
1577
|
-
texture_node.label = sname[0]
|
|
1578
|
-
|
|
1579
|
-
if disp_texture:
|
|
1580
|
-
texture_nodes.append(disp_texture)
|
|
1581
|
-
if bump_node_texture:
|
|
1582
|
-
texture_nodes.append(bump_node_texture)
|
|
1583
|
-
if normal_node_texture:
|
|
1584
|
-
texture_nodes.append(normal_node_texture)
|
|
1585
|
-
|
|
1586
|
-
if ao_texture:
|
|
1587
|
-
# We want the ambient occlusion texture to be the top most texture node
|
|
1588
|
-
texture_nodes.insert(0, ao_texture)
|
|
1589
|
-
|
|
1590
|
-
# Alignment
|
|
1591
|
-
for i, texture_node in enumerate(texture_nodes):
|
|
1592
|
-
offset = Vector((-550, (i * -280) + 200))
|
|
1593
|
-
texture_node.location = active_node.location + offset
|
|
1594
|
-
|
|
1595
|
-
if normal_node:
|
|
1596
|
-
# Extra alignment if normal node was added
|
|
1597
|
-
normal_node.location = normal_node_texture.location + Vector((300, 0))
|
|
1598
|
-
|
|
1599
|
-
if bump_node:
|
|
1600
|
-
# Extra alignment if bump node was added
|
|
1601
|
-
bump_node.location = bump_node_texture.location + Vector((300, 0))
|
|
1602
|
-
|
|
1603
|
-
if roughness_node:
|
|
1604
|
-
# Alignment of invert node if glossy map
|
|
1605
|
-
invert_node.location = roughness_node.location + Vector((300, 0))
|
|
1606
|
-
|
|
1607
|
-
# Add texture input + mapping
|
|
1608
|
-
mapping = nodes.new(type='ShaderNodeMapping')
|
|
1609
|
-
mapping.location = active_node.location + Vector((-1050, 0))
|
|
1610
|
-
if len(texture_nodes) > 1:
|
|
1611
|
-
# If more than one texture add reroute node in between
|
|
1612
|
-
reroute = nodes.new(type='NodeReroute')
|
|
1613
|
-
texture_nodes.append(reroute)
|
|
1614
|
-
tex_coords = Vector((texture_nodes[0].location.x,
|
|
1615
|
-
sum(n.location.y for n in texture_nodes) / len(texture_nodes)))
|
|
1616
|
-
reroute.location = tex_coords + Vector((-50, -120))
|
|
1617
|
-
for texture_node in texture_nodes:
|
|
1618
|
-
link = connect_sockets(texture_node.inputs[0], reroute.outputs[0])
|
|
1619
|
-
link = connect_sockets(reroute.inputs[0], mapping.outputs[0])
|
|
1620
|
-
else:
|
|
1621
|
-
link = connect_sockets(texture_nodes[0].inputs[0], mapping.outputs[0])
|
|
1622
|
-
|
|
1623
|
-
# Connect texture_coordinates to mapping node
|
|
1624
|
-
texture_input = nodes.new(type='ShaderNodeTexCoord')
|
|
1625
|
-
texture_input.location = mapping.location + Vector((-200, 0))
|
|
1626
|
-
link = connect_sockets(mapping.inputs[0], texture_input.outputs[2])
|
|
1627
|
-
|
|
1628
|
-
# Create frame around tex coords and mapping
|
|
1629
|
-
frame = nodes.new(type='NodeFrame')
|
|
1630
|
-
frame.label = 'Mapping'
|
|
1631
|
-
mapping.parent = frame
|
|
1632
|
-
texture_input.parent = frame
|
|
1633
|
-
frame.update()
|
|
1634
|
-
|
|
1635
|
-
# Create frame around texture nodes
|
|
1636
|
-
frame = nodes.new(type='NodeFrame')
|
|
1637
|
-
frame.label = 'Textures'
|
|
1638
|
-
for tnode in texture_nodes:
|
|
1639
|
-
tnode.parent = frame
|
|
1640
|
-
frame.update()
|
|
1641
|
-
|
|
1642
|
-
# Just to be sure
|
|
1643
|
-
active_node.select = False
|
|
1644
|
-
nodes.update()
|
|
1645
|
-
links.update()
|
|
1646
|
-
force_update(context)
|
|
1647
|
-
return {'FINISHED'}
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
class NWAddReroutes(Operator, NWBase):
|
|
1651
|
-
"""Add Reroute Nodes and link them to outputs of selected nodes"""
|
|
1652
|
-
bl_idname = "node.nw_add_reroutes"
|
|
1653
|
-
bl_label = "Add Reroutes"
|
|
1654
|
-
bl_description = "Add Reroutes to outputs"
|
|
1655
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
1656
|
-
|
|
1657
|
-
option: EnumProperty(
|
|
1658
|
-
name="Option",
|
|
1659
|
-
items=[
|
|
1660
|
-
('ALL', 'To All', 'Add to all outputs'),
|
|
1661
|
-
('LOOSE', 'To Loose', 'Add only to loose outputs'),
|
|
1662
|
-
('LINKED', 'To Linked', 'Add only to linked outputs'),
|
|
1663
|
-
]
|
|
1664
|
-
)
|
|
1665
|
-
|
|
1666
|
-
@classmethod
|
|
1667
|
-
def poll(cls, context):
|
|
1668
|
-
return nw_check(cls, context) and nw_check_selected(cls, context)
|
|
1669
|
-
|
|
1670
|
-
def execute(self, context):
|
|
1671
|
-
nodes, _links = get_nodes_links(context)
|
|
1672
|
-
post_select = [] # Nodes to be selected after execution.
|
|
1673
|
-
y_offset = -22.0
|
|
1674
|
-
|
|
1675
|
-
# Create reroutes and recreate links.
|
|
1676
|
-
for node in [n for n in nodes if n.select]:
|
|
1677
|
-
if not node.outputs:
|
|
1678
|
-
continue
|
|
1679
|
-
x = node.location.x + node.width + 20.0
|
|
1680
|
-
y = node.location.y
|
|
1681
|
-
new_node_reroutes = []
|
|
1682
|
-
|
|
1683
|
-
# Unhide 'REROUTE' nodes to avoid issues with location.y
|
|
1684
|
-
if node.type == 'REROUTE':
|
|
1685
|
-
node.hide = False
|
|
1686
|
-
else:
|
|
1687
|
-
y -= 35.0
|
|
1688
|
-
|
|
1689
|
-
reroutes_count = 0 # Will be used when aligning reroutes added to hidden nodes.
|
|
1690
|
-
for out_i, output in enumerate(node.outputs):
|
|
1691
|
-
if output.is_unavailable or isinstance(output, bpy.types.NodeSocketVirtual):
|
|
1692
|
-
continue
|
|
1693
|
-
if node.type == 'R_LAYERS' and output.name != 'Alpha':
|
|
1694
|
-
# If 'R_LAYERS' check if output is used in render pass.
|
|
1695
|
-
# If output is "Alpha", assume it's used. Not available in passes.
|
|
1696
|
-
node_scene = node.scene
|
|
1697
|
-
node_layer = node.layer
|
|
1698
|
-
for rlo in rl_outputs:
|
|
1699
|
-
# Check entries in global 'rl_outputs' variable.
|
|
1700
|
-
if output.name in {rlo.output_name, rlo.exr_output_name}:
|
|
1701
|
-
if not getattr(node_scene.view_layers[node_layer], rlo.render_pass):
|
|
1702
|
-
continue
|
|
1703
|
-
# Output is valid when option is 'all' or when 'loose' output has no links.
|
|
1704
|
-
valid = ((self.option == 'ALL') or
|
|
1705
|
-
(self.option == 'LOOSE' and not output.links) or
|
|
1706
|
-
(self.option == 'LINKED' and output.links))
|
|
1707
|
-
if valid:
|
|
1708
|
-
# Add reroutes only if valid.
|
|
1709
|
-
n = nodes.new('NodeReroute')
|
|
1710
|
-
nodes.active = n
|
|
1711
|
-
for link in output.links:
|
|
1712
|
-
connect_sockets(n.outputs[0], link.to_socket)
|
|
1713
|
-
connect_sockets(output, n.inputs[0])
|
|
1714
|
-
n.location = x, y
|
|
1715
|
-
new_node_reroutes.append(n)
|
|
1716
|
-
post_select.append(n)
|
|
1717
|
-
if valid or not output.hide:
|
|
1718
|
-
# Offset reroutes for all outputs, except hidden ones.
|
|
1719
|
-
reroutes_count += 1
|
|
1720
|
-
y += y_offset
|
|
1721
|
-
|
|
1722
|
-
# Nicer reroutes distribution along y when node.hide.
|
|
1723
|
-
if node.hide:
|
|
1724
|
-
y_translate = reroutes_count * y_offset / 2.0 - y_offset - 35.0
|
|
1725
|
-
for reroute in new_node_reroutes:
|
|
1726
|
-
reroute.location.y -= y_translate
|
|
1727
|
-
|
|
1728
|
-
if post_select:
|
|
1729
|
-
for node in nodes:
|
|
1730
|
-
# Select only newly created nodes.
|
|
1731
|
-
node.select = node in post_select
|
|
1732
|
-
else:
|
|
1733
|
-
# No new nodes were created.
|
|
1734
|
-
return {'CANCELLED'}
|
|
1735
|
-
|
|
1736
|
-
return {'FINISHED'}
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
class NWLinkActiveToSelected(Operator, NWBase):
|
|
1740
|
-
"""Link active node to selected nodes basing on various criteria"""
|
|
1741
|
-
bl_idname = "node.nw_link_active_to_selected"
|
|
1742
|
-
bl_label = "Link Active Node to Selected"
|
|
1743
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
1744
|
-
|
|
1745
|
-
replace: BoolProperty()
|
|
1746
|
-
use_node_name: BoolProperty()
|
|
1747
|
-
use_outputs_names: BoolProperty()
|
|
1748
|
-
|
|
1749
|
-
@classmethod
|
|
1750
|
-
def poll(cls, context):
|
|
1751
|
-
return (nw_check(cls, context)
|
|
1752
|
-
and nw_check_active(cls, context)
|
|
1753
|
-
and nw_check_selected(cls, context, min=2))
|
|
1754
|
-
|
|
1755
|
-
def execute(self, context):
|
|
1756
|
-
nodes, links = get_nodes_links(context)
|
|
1757
|
-
replace = self.replace
|
|
1758
|
-
use_node_name = self.use_node_name
|
|
1759
|
-
use_outputs_names = self.use_outputs_names
|
|
1760
|
-
active = nodes.active
|
|
1761
|
-
selected = [node for node in nodes if node.select and node != active]
|
|
1762
|
-
outputs = [] # Only usable outputs of active nodes will be stored here.
|
|
1763
|
-
for out in active.outputs:
|
|
1764
|
-
if active.type != 'R_LAYERS':
|
|
1765
|
-
outputs.append(out)
|
|
1766
|
-
else:
|
|
1767
|
-
# 'R_LAYERS' node type needs special handling.
|
|
1768
|
-
# outputs of 'R_LAYERS' are callable even if not seen in UI.
|
|
1769
|
-
# Only outputs that represent used passes should be taken into account
|
|
1770
|
-
# Check if pass represented by output is used.
|
|
1771
|
-
# global 'rl_outputs' list will be used for that
|
|
1772
|
-
for rlo in rl_outputs:
|
|
1773
|
-
pass_used = False # initial value. Will be set to True if pass is used
|
|
1774
|
-
if out.name == 'Alpha':
|
|
1775
|
-
# Alpha output is always present. Doesn't have representation in render pass. Assume it's used.
|
|
1776
|
-
pass_used = True
|
|
1777
|
-
elif out.name in {rlo.output_name, rlo.exr_output_name}:
|
|
1778
|
-
# example 'render_pass' entry: 'use_pass_uv' Check if True in scene render layers
|
|
1779
|
-
pass_used = getattr(active.scene.view_layers[active.layer], rlo.render_pass)
|
|
1780
|
-
break
|
|
1781
|
-
if pass_used:
|
|
1782
|
-
outputs.append(out)
|
|
1783
|
-
doit = True # Will be changed to False when links successfully added to previous output.
|
|
1784
|
-
for out in outputs:
|
|
1785
|
-
if doit:
|
|
1786
|
-
for node in selected:
|
|
1787
|
-
dst_name = node.name # Will be compared with src_name if needed.
|
|
1788
|
-
# When node has label - use it as dst_name
|
|
1789
|
-
if node.label:
|
|
1790
|
-
dst_name = node.label
|
|
1791
|
-
valid = True # Initial value. Will be changed to False if names don't match.
|
|
1792
|
-
src_name = dst_name # If names not used - this assignment will keep valid = True.
|
|
1793
|
-
if use_node_name:
|
|
1794
|
-
# Set src_name to source node name or label
|
|
1795
|
-
src_name = active.name
|
|
1796
|
-
if active.label:
|
|
1797
|
-
src_name = active.label
|
|
1798
|
-
elif use_outputs_names:
|
|
1799
|
-
src_name = (out.name, )
|
|
1800
|
-
for rlo in rl_outputs:
|
|
1801
|
-
if out.name in {rlo.output_name, rlo.exr_output_name}:
|
|
1802
|
-
src_name = (rlo.output_name, rlo.exr_output_name)
|
|
1803
|
-
if dst_name not in src_name:
|
|
1804
|
-
valid = False
|
|
1805
|
-
if valid:
|
|
1806
|
-
for input in node.inputs:
|
|
1807
|
-
if input.type == out.type or node.type == 'REROUTE':
|
|
1808
|
-
if replace or not input.is_linked:
|
|
1809
|
-
connect_sockets(out, input)
|
|
1810
|
-
if not use_node_name and not use_outputs_names:
|
|
1811
|
-
doit = False
|
|
1812
|
-
break
|
|
1813
|
-
|
|
1814
|
-
return {'FINISHED'}
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
class NWAlignNodes(Operator, NWBase):
|
|
1818
|
-
'''Align the selected nodes neatly in a row/column'''
|
|
1819
|
-
bl_idname = "node.nw_align_nodes"
|
|
1820
|
-
bl_label = "Align Nodes"
|
|
1821
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
1822
|
-
margin: IntProperty(name='Margin', default=50, description='The amount of space between nodes')
|
|
1823
|
-
|
|
1824
|
-
@classmethod
|
|
1825
|
-
def poll(cls, context):
|
|
1826
|
-
return nw_check(cls, context) and nw_check_not_empty(cls, context)
|
|
1827
|
-
|
|
1828
|
-
def execute(self, context):
|
|
1829
|
-
nodes, links = get_nodes_links(context)
|
|
1830
|
-
margin = self.margin
|
|
1831
|
-
|
|
1832
|
-
selection = []
|
|
1833
|
-
for node in nodes:
|
|
1834
|
-
if node.select and node.type != 'FRAME':
|
|
1835
|
-
selection.append(node)
|
|
1836
|
-
|
|
1837
|
-
# If no nodes are selected, align all nodes
|
|
1838
|
-
active_loc = None
|
|
1839
|
-
if not selection:
|
|
1840
|
-
selection = nodes
|
|
1841
|
-
elif nodes.active in selection:
|
|
1842
|
-
active_loc = copy(nodes.active.location) # make a copy, not a reference
|
|
1843
|
-
|
|
1844
|
-
# Check if nodes should be laid out horizontally or vertically
|
|
1845
|
-
# use dimension to get center of node, not corner
|
|
1846
|
-
x_locs = [n.location.x + (n.dimensions.x / 2) for n in selection]
|
|
1847
|
-
y_locs = [n.location.y - (n.dimensions.y / 2) for n in selection]
|
|
1848
|
-
x_range = max(x_locs) - min(x_locs)
|
|
1849
|
-
y_range = max(y_locs) - min(y_locs)
|
|
1850
|
-
mid_x = (max(x_locs) + min(x_locs)) / 2
|
|
1851
|
-
mid_y = (max(y_locs) + min(y_locs)) / 2
|
|
1852
|
-
horizontal = x_range > y_range
|
|
1853
|
-
|
|
1854
|
-
# Sort selection by location of node mid-point
|
|
1855
|
-
if horizontal:
|
|
1856
|
-
selection = sorted(selection, key=lambda n: n.location.x + (n.dimensions.x / 2))
|
|
1857
|
-
else:
|
|
1858
|
-
selection = sorted(selection, key=lambda n: n.location.y - (n.dimensions.y / 2), reverse=True)
|
|
1859
|
-
|
|
1860
|
-
# Alignment
|
|
1861
|
-
current_pos = 0
|
|
1862
|
-
for node in selection:
|
|
1863
|
-
current_margin = margin
|
|
1864
|
-
current_margin = current_margin * 0.5 if node.hide else current_margin # Use a smaller margin for hidden nodes
|
|
1865
|
-
|
|
1866
|
-
if horizontal:
|
|
1867
|
-
node.location.x = current_pos
|
|
1868
|
-
current_pos += current_margin + node.dimensions.x
|
|
1869
|
-
node.location.y = mid_y + (node.dimensions.y / 2)
|
|
1870
|
-
else:
|
|
1871
|
-
# node.bl_height_min is the min size of a collapsed node, +6 for the outlines and margins
|
|
1872
|
-
hide_offset = (node.dimensions.y - (node.bl_height_min + 6)) / 2 if node.hide else 0
|
|
1873
|
-
node.location.y = current_pos - hide_offset # Hidden nodes center their sockets around the label instead of below
|
|
1874
|
-
current_pos -= (current_margin * 0.3) + node.dimensions.y # Use half-margin for vertical alignment
|
|
1875
|
-
node.location.x = mid_x - (node.dimensions.x / 2)
|
|
1876
|
-
|
|
1877
|
-
# If active node is selected, center nodes around it
|
|
1878
|
-
if active_loc is not None:
|
|
1879
|
-
active_loc_diff = active_loc - nodes.active.location
|
|
1880
|
-
for node in selection:
|
|
1881
|
-
node.location += active_loc_diff
|
|
1882
|
-
else: # Position nodes centered around where they used to be
|
|
1883
|
-
locs = ([n.location.x + (n.dimensions.x / 2) for n in selection]
|
|
1884
|
-
) if horizontal else ([n.location.y - (n.dimensions.y / 2) for n in selection])
|
|
1885
|
-
new_mid = (max(locs) + min(locs)) / 2
|
|
1886
|
-
for node in selection:
|
|
1887
|
-
if horizontal:
|
|
1888
|
-
node.location.x += (mid_x - new_mid)
|
|
1889
|
-
else:
|
|
1890
|
-
node.location.y += (mid_y - new_mid)
|
|
1891
|
-
|
|
1892
|
-
return {'FINISHED'}
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
class NWSelectParentChildren(Operator, NWBase):
|
|
1896
|
-
bl_idname = "node.nw_select_parent_child"
|
|
1897
|
-
bl_label = "Select Parent or Children"
|
|
1898
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
1899
|
-
|
|
1900
|
-
option: EnumProperty(
|
|
1901
|
-
name="Option",
|
|
1902
|
-
items=(
|
|
1903
|
-
('PARENT', 'Select Parent', 'Select Parent Frame'),
|
|
1904
|
-
('CHILD', 'Select Children', 'Select members of selected frame'),
|
|
1905
|
-
)
|
|
1906
|
-
)
|
|
1907
|
-
|
|
1908
|
-
@classmethod
|
|
1909
|
-
def poll(cls, context):
|
|
1910
|
-
return nw_check(cls, context) and nw_check_selected(cls, context)
|
|
1911
|
-
|
|
1912
|
-
def execute(self, context):
|
|
1913
|
-
nodes, links = get_nodes_links(context)
|
|
1914
|
-
option = self.option
|
|
1915
|
-
selected = [node for node in nodes if node.select]
|
|
1916
|
-
if option == 'PARENT':
|
|
1917
|
-
for sel in selected:
|
|
1918
|
-
parent = sel.parent
|
|
1919
|
-
if parent:
|
|
1920
|
-
parent.select = True
|
|
1921
|
-
else: # option == 'CHILD'
|
|
1922
|
-
for sel in selected:
|
|
1923
|
-
children = [node for node in nodes if node.parent == sel]
|
|
1924
|
-
for kid in children:
|
|
1925
|
-
kid.select = True
|
|
1926
|
-
|
|
1927
|
-
return {'FINISHED'}
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
class NWDetachOutputs(Operator, NWBase):
|
|
1931
|
-
"""Detach outputs of selected node leaving inputs linked"""
|
|
1932
|
-
bl_idname = "node.nw_detach_outputs"
|
|
1933
|
-
bl_label = "Detach Outputs"
|
|
1934
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
1935
|
-
|
|
1936
|
-
@classmethod
|
|
1937
|
-
def poll(cls, context):
|
|
1938
|
-
return nw_check(cls, context) and nw_check_selected(cls, context)
|
|
1939
|
-
|
|
1940
|
-
def execute(self, context):
|
|
1941
|
-
nodes, links = get_nodes_links(context)
|
|
1942
|
-
selected = context.selected_nodes
|
|
1943
|
-
bpy.ops.node.duplicate_move_keep_inputs()
|
|
1944
|
-
new_nodes = context.selected_nodes
|
|
1945
|
-
bpy.ops.node.select_all(action="DESELECT")
|
|
1946
|
-
for node in selected:
|
|
1947
|
-
node.select = True
|
|
1948
|
-
bpy.ops.node.delete_reconnect()
|
|
1949
|
-
for new_node in new_nodes:
|
|
1950
|
-
new_node.select = True
|
|
1951
|
-
bpy.ops.transform.translate('INVOKE_DEFAULT')
|
|
1952
|
-
|
|
1953
|
-
return {'FINISHED'}
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
class NWLinkToOutputNode(Operator):
|
|
1957
|
-
"""Link to Composite node or Material Output node"""
|
|
1958
|
-
bl_idname = "node.nw_link_out"
|
|
1959
|
-
bl_label = "Connect to Output"
|
|
1960
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
1961
|
-
|
|
1962
|
-
@classmethod
|
|
1963
|
-
def poll(cls, context):
|
|
1964
|
-
"""Disabled for custom nodes as we do not know which nodes are outputs."""
|
|
1965
|
-
return (nw_check(cls, context)
|
|
1966
|
-
and nw_check_space_type(cls, context, {'ShaderNodeTree', 'CompositorNodeTree',
|
|
1967
|
-
'TextureNodeTree', 'GeometryNodeTree'})
|
|
1968
|
-
and nw_check_active(cls, context)
|
|
1969
|
-
and nw_check_visible_outputs(cls, context))
|
|
1970
|
-
|
|
1971
|
-
def execute(self, context):
|
|
1972
|
-
nodes, links = get_nodes_links(context)
|
|
1973
|
-
active = nodes.active
|
|
1974
|
-
output_index = None
|
|
1975
|
-
tree_type = context.space_data.tree_type
|
|
1976
|
-
shader_outputs = {'OBJECT': 'ShaderNodeOutputMaterial',
|
|
1977
|
-
'WORLD': 'ShaderNodeOutputWorld',
|
|
1978
|
-
'LINESTYLE': 'ShaderNodeOutputLineStyle'}
|
|
1979
|
-
output_type = {
|
|
1980
|
-
'ShaderNodeTree': shader_outputs[context.space_data.shader_type],
|
|
1981
|
-
'CompositorNodeTree': 'NodeGroupOutput',
|
|
1982
|
-
'TextureNodeTree': 'TextureNodeOutput',
|
|
1983
|
-
'GeometryNodeTree': 'NodeGroupOutput',
|
|
1984
|
-
}[tree_type]
|
|
1985
|
-
for node in nodes:
|
|
1986
|
-
# check whether the node is an output node and,
|
|
1987
|
-
# if supported, whether it's the active one
|
|
1988
|
-
if node.rna_type.identifier == output_type \
|
|
1989
|
-
and (node.is_active_output if hasattr(node, 'is_active_output')
|
|
1990
|
-
else True):
|
|
1991
|
-
output_node = node
|
|
1992
|
-
break
|
|
1993
|
-
else: # No output node exists
|
|
1994
|
-
bpy.ops.node.select_all(action="DESELECT")
|
|
1995
|
-
output_node = nodes.new(output_type)
|
|
1996
|
-
output_node.location.x = active.location.x + active.dimensions.x + 80
|
|
1997
|
-
output_node.location.y = active.location.y
|
|
1998
|
-
|
|
1999
|
-
if active.outputs:
|
|
2000
|
-
for i, output in enumerate(active.outputs):
|
|
2001
|
-
if is_visible_socket(output):
|
|
2002
|
-
output_index = i
|
|
2003
|
-
break
|
|
2004
|
-
for i, output in enumerate(active.outputs):
|
|
2005
|
-
if output.type == output_node.inputs[0].type and is_visible_socket(output):
|
|
2006
|
-
output_index = i
|
|
2007
|
-
break
|
|
2008
|
-
|
|
2009
|
-
out_input_index = 0
|
|
2010
|
-
if tree_type == 'ShaderNodeTree':
|
|
2011
|
-
if active.outputs[output_index].name == 'Volume':
|
|
2012
|
-
out_input_index = 1
|
|
2013
|
-
elif active.outputs[output_index].name == 'Displacement':
|
|
2014
|
-
out_input_index = 2
|
|
2015
|
-
elif tree_type == 'GeometryNodeTree':
|
|
2016
|
-
if active.outputs[output_index].type != 'GEOMETRY':
|
|
2017
|
-
return {'CANCELLED'}
|
|
2018
|
-
connect_sockets(active.outputs[output_index], output_node.inputs[out_input_index])
|
|
2019
|
-
|
|
2020
|
-
force_update(context) # viewport render does not update
|
|
2021
|
-
|
|
2022
|
-
return {'FINISHED'}
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
class NWMakeLink(Operator, NWBase):
|
|
2026
|
-
"""Make a link from one socket to another"""
|
|
2027
|
-
bl_idname = 'node.nw_make_link'
|
|
2028
|
-
bl_label = 'Make Link'
|
|
2029
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
2030
|
-
from_socket: IntProperty()
|
|
2031
|
-
to_socket: IntProperty()
|
|
2032
|
-
|
|
2033
|
-
def execute(self, context):
|
|
2034
|
-
nodes, links = get_nodes_links(context)
|
|
2035
|
-
|
|
2036
|
-
n1 = nodes[context.scene.NWLazySource]
|
|
2037
|
-
n2 = nodes[context.scene.NWLazyTarget]
|
|
2038
|
-
|
|
2039
|
-
connect_sockets(n1.outputs[self.from_socket], n2.inputs[self.to_socket])
|
|
2040
|
-
|
|
2041
|
-
force_update(context)
|
|
2042
|
-
|
|
2043
|
-
return {'FINISHED'}
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
class NWCallInputsMenu(Operator, NWBase):
|
|
2047
|
-
"""Link from this output"""
|
|
2048
|
-
bl_idname = 'node.nw_call_inputs_menu'
|
|
2049
|
-
bl_label = 'Make Link'
|
|
2050
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
2051
|
-
from_socket: IntProperty()
|
|
2052
|
-
|
|
2053
|
-
def execute(self, context):
|
|
2054
|
-
nodes, links = get_nodes_links(context)
|
|
2055
|
-
|
|
2056
|
-
context.scene.NWSourceSocket = self.from_socket
|
|
2057
|
-
|
|
2058
|
-
n1 = nodes[context.scene.NWLazySource]
|
|
2059
|
-
n2 = nodes[context.scene.NWLazyTarget]
|
|
2060
|
-
if len(n2.inputs) > 1:
|
|
2061
|
-
bpy.ops.wm.call_menu("INVOKE_DEFAULT", name=NWConnectionListInputs.bl_idname)
|
|
2062
|
-
elif len(n2.inputs) == 1:
|
|
2063
|
-
connect_sockets(n1.outputs[self.from_socket], n2.inputs[0])
|
|
2064
|
-
return {'FINISHED'}
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
class NWAddSequence(Operator, NWBase, ImportHelper):
|
|
2068
|
-
"""Add an Image Sequence"""
|
|
2069
|
-
bl_idname = 'node.nw_add_sequence'
|
|
2070
|
-
bl_label = 'Import Image Sequence'
|
|
2071
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
2072
|
-
|
|
2073
|
-
directory: StringProperty(
|
|
2074
|
-
subtype="DIR_PATH"
|
|
2075
|
-
)
|
|
2076
|
-
filename: StringProperty(
|
|
2077
|
-
subtype="FILE_NAME"
|
|
2078
|
-
)
|
|
2079
|
-
files: CollectionProperty(
|
|
2080
|
-
type=bpy.types.OperatorFileListElement,
|
|
2081
|
-
options={'HIDDEN', 'SKIP_SAVE'}
|
|
2082
|
-
)
|
|
2083
|
-
relative_path: BoolProperty(
|
|
2084
|
-
name='Relative Path',
|
|
2085
|
-
description='Set the file path relative to the blend file, when possible',
|
|
2086
|
-
default=True
|
|
2087
|
-
)
|
|
2088
|
-
|
|
2089
|
-
@classmethod
|
|
2090
|
-
def poll(cls, context):
|
|
2091
|
-
return (nw_check(cls, context)
|
|
2092
|
-
and nw_check_space_type(cls, context, {'ShaderNodeTree', 'CompositorNodeTree'}))
|
|
2093
|
-
|
|
2094
|
-
def draw(self, context):
|
|
2095
|
-
layout = self.layout
|
|
2096
|
-
layout.alignment = 'LEFT'
|
|
2097
|
-
|
|
2098
|
-
layout.prop(self, 'relative_path')
|
|
2099
|
-
|
|
2100
|
-
def execute(self, context):
|
|
2101
|
-
nodes, links = get_nodes_links(context)
|
|
2102
|
-
directory = bpy.path.abspath(self.directory)
|
|
2103
|
-
filename = self.filename
|
|
2104
|
-
files = self.files
|
|
2105
|
-
tree = context.space_data.node_tree
|
|
2106
|
-
|
|
2107
|
-
# DEBUG
|
|
2108
|
-
# print ("\nDIR:", directory)
|
|
2109
|
-
# print ("FN:", filename)
|
|
2110
|
-
# print ("Fs:", list(f.name for f in files), '\n')
|
|
2111
|
-
|
|
2112
|
-
if tree.type == 'SHADER':
|
|
2113
|
-
node_type = "ShaderNodeTexImage"
|
|
2114
|
-
elif tree.type == 'COMPOSITING':
|
|
2115
|
-
node_type = "CompositorNodeImage"
|
|
2116
|
-
else:
|
|
2117
|
-
self.report({'ERROR'}, "Unsupported node tree type")
|
|
2118
|
-
return {'CANCELLED'}
|
|
2119
|
-
|
|
2120
|
-
if not files[0].name and not filename:
|
|
2121
|
-
self.report({'ERROR'}, "No file chosen")
|
|
2122
|
-
return {'CANCELLED'}
|
|
2123
|
-
elif files[0].name and (not filename or not path.exists(directory + filename)):
|
|
2124
|
-
# User has selected multiple files without an active one, or the active one is non-existent
|
|
2125
|
-
filename = files[0].name
|
|
2126
|
-
|
|
2127
|
-
if not path.exists(directory + filename):
|
|
2128
|
-
self.report({'ERROR'}, rpt_("{} does not exist").format(filename))
|
|
2129
|
-
return {'CANCELLED'}
|
|
2130
|
-
|
|
2131
|
-
without_ext = '.'.join(filename.split('.')[:-1])
|
|
2132
|
-
|
|
2133
|
-
# if last digit isn't a number, it's not a sequence
|
|
2134
|
-
if not without_ext[-1].isdigit():
|
|
2135
|
-
self.report({'ERROR'}, rpt_("{} does not seem to be part of a sequence").format(filename))
|
|
2136
|
-
return {'CANCELLED'}
|
|
2137
|
-
|
|
2138
|
-
extension = filename.split('.')[-1]
|
|
2139
|
-
reverse = without_ext[::-1] # reverse string
|
|
2140
|
-
|
|
2141
|
-
count_numbers = 0
|
|
2142
|
-
for char in reverse:
|
|
2143
|
-
if char.isdigit():
|
|
2144
|
-
count_numbers += 1
|
|
2145
|
-
else:
|
|
2146
|
-
break
|
|
2147
|
-
|
|
2148
|
-
without_num = without_ext[:count_numbers * -1]
|
|
2149
|
-
|
|
2150
|
-
files = sorted(glob(directory + without_num + "[0-9]" * count_numbers + "." + extension))
|
|
2151
|
-
|
|
2152
|
-
num_frames = len(files)
|
|
2153
|
-
|
|
2154
|
-
nodes_list = [node for node in nodes]
|
|
2155
|
-
if nodes_list:
|
|
2156
|
-
nodes_list.sort(key=lambda k: k.location.x)
|
|
2157
|
-
xloc = nodes_list[0].location.x - 220 # place new nodes at far left
|
|
2158
|
-
yloc = 0
|
|
2159
|
-
for node in nodes:
|
|
2160
|
-
node.select = False
|
|
2161
|
-
yloc += node_mid_pt(node, 'y')
|
|
2162
|
-
yloc = yloc / len(nodes)
|
|
2163
|
-
else:
|
|
2164
|
-
xloc = 0
|
|
2165
|
-
yloc = 0
|
|
2166
|
-
|
|
2167
|
-
name_with_hashes = without_num + "#" * count_numbers + '.' + extension
|
|
2168
|
-
|
|
2169
|
-
bpy.ops.node.add_node('INVOKE_DEFAULT', use_transform=True, type=node_type)
|
|
2170
|
-
node = nodes.active
|
|
2171
|
-
node.label = name_with_hashes
|
|
2172
|
-
|
|
2173
|
-
filepath = directory + (without_ext + '.' + extension)
|
|
2174
|
-
if self.relative_path:
|
|
2175
|
-
if bpy.data.filepath:
|
|
2176
|
-
try:
|
|
2177
|
-
filepath = bpy.path.relpath(filepath)
|
|
2178
|
-
except ValueError:
|
|
2179
|
-
pass
|
|
2180
|
-
|
|
2181
|
-
img = bpy.data.images.load(filepath)
|
|
2182
|
-
img.source = 'SEQUENCE'
|
|
2183
|
-
img.name = name_with_hashes
|
|
2184
|
-
node.image = img
|
|
2185
|
-
image_user = node.image_user if tree.type == 'SHADER' else node
|
|
2186
|
-
# separate the number from the file name of the first file
|
|
2187
|
-
image_user.frame_offset = int(files[0][len(without_num) + len(directory):-1 * (len(extension) + 1)]) - 1
|
|
2188
|
-
image_user.frame_duration = num_frames
|
|
2189
|
-
|
|
2190
|
-
return {'FINISHED'}
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
class NWSaveViewer(bpy.types.Operator, ExportHelper):
|
|
2194
|
-
"""Save the current viewer node to an image file"""
|
|
2195
|
-
bl_idname = "node.nw_save_viewer"
|
|
2196
|
-
bl_label = "Save Viewer Image"
|
|
2197
|
-
filepath: StringProperty(subtype="FILE_PATH")
|
|
2198
|
-
filename_ext: EnumProperty(
|
|
2199
|
-
name="Format",
|
|
2200
|
-
description="Choose the file format to save to",
|
|
2201
|
-
items=(('.bmp', "BMP", ""),
|
|
2202
|
-
('.rgb', 'IRIS', ""),
|
|
2203
|
-
('.png', 'PNG', ""),
|
|
2204
|
-
('.jpg', 'JPEG', ""),
|
|
2205
|
-
('.jp2', 'JPEG2000', ""),
|
|
2206
|
-
('.tga', 'TARGA', ""),
|
|
2207
|
-
('.cin', 'CINEON', ""),
|
|
2208
|
-
('.dpx', 'DPX', ""),
|
|
2209
|
-
('.exr', 'OPEN_EXR', ""),
|
|
2210
|
-
('.hdr', 'HDR', ""),
|
|
2211
|
-
('.tif', 'TIFF', ""),
|
|
2212
|
-
('.webp', 'WEBP', ""),
|
|
2213
|
-
),
|
|
2214
|
-
default='.png',
|
|
2215
|
-
)
|
|
2216
|
-
|
|
2217
|
-
@classmethod
|
|
2218
|
-
def poll(cls, context):
|
|
2219
|
-
return (nw_check(cls, context)
|
|
2220
|
-
and nw_check_space_type(cls, context, {'CompositorNodeTree'})
|
|
2221
|
-
and nw_check_viewer_node(cls))
|
|
2222
|
-
|
|
2223
|
-
def execute(self, context):
|
|
2224
|
-
fp = self.filepath
|
|
2225
|
-
if not fp:
|
|
2226
|
-
return {'CANCELLED'}
|
|
2227
|
-
|
|
2228
|
-
formats = {
|
|
2229
|
-
'.bmp': 'BMP',
|
|
2230
|
-
'.rgb': 'IRIS',
|
|
2231
|
-
'.png': 'PNG',
|
|
2232
|
-
'.jpg': 'JPEG',
|
|
2233
|
-
'.jpeg': 'JPEG',
|
|
2234
|
-
'.jp2': 'JPEG2000',
|
|
2235
|
-
'.tga': 'TARGA',
|
|
2236
|
-
'.cin': 'CINEON',
|
|
2237
|
-
'.dpx': 'DPX',
|
|
2238
|
-
'.exr': 'OPEN_EXR',
|
|
2239
|
-
'.hdr': 'HDR',
|
|
2240
|
-
'.tiff': 'TIFF',
|
|
2241
|
-
'.tif': 'TIFF',
|
|
2242
|
-
'.webp': 'WEBP',
|
|
2243
|
-
}
|
|
2244
|
-
image_settings = context.scene.render.image_settings
|
|
2245
|
-
old_media_type = image_settings.media_type
|
|
2246
|
-
old_file_format = image_settings.file_format
|
|
2247
|
-
image_settings.media_type = 'IMAGE'
|
|
2248
|
-
image_settings.file_format = formats[self.filename_ext]
|
|
2249
|
-
|
|
2250
|
-
try:
|
|
2251
|
-
get_viewer_image().save_render(fp)
|
|
2252
|
-
except RuntimeError as e:
|
|
2253
|
-
self.report({'ERROR'}, rpt_("Could not write image: {}").format(e))
|
|
2254
|
-
|
|
2255
|
-
image_settings.media_type = old_media_type
|
|
2256
|
-
image_settings.file_format = old_file_format
|
|
2257
|
-
return {'FINISHED'}
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
class NWResetNodes(bpy.types.Operator):
|
|
2261
|
-
"""Reset Nodes in Selection"""
|
|
2262
|
-
bl_idname = "node.nw_reset_nodes"
|
|
2263
|
-
bl_label = "Reset Nodes"
|
|
2264
|
-
bl_options = {'REGISTER', 'UNDO'}
|
|
2265
|
-
|
|
2266
|
-
@classmethod
|
|
2267
|
-
def poll(cls, context):
|
|
2268
|
-
return (nw_check(cls, context)
|
|
2269
|
-
and nw_check_selected(cls, context)
|
|
2270
|
-
and nw_check_active(cls, context))
|
|
2271
|
-
|
|
2272
|
-
@staticmethod
|
|
2273
|
-
def is_frame_node(node):
|
|
2274
|
-
return node.bl_idname == "NodeFrame"
|
|
2275
|
-
|
|
2276
|
-
group_node_types = {"CompositorNodeGroup", "GeometryNodeGroup", "ShaderNodeGroup"}
|
|
2277
|
-
# TODO All zone nodes are ignored here for now, because replacing one of the input/output pair breaks the zone.
|
|
2278
|
-
# It's possible to handle zones by using the `paired_output` function of an input node
|
|
2279
|
-
# and reconstruct the zone using the `pair_with_output` function.
|
|
2280
|
-
zone_node_types = {"GeometryNodeRepeatInput", "GeometryNodeRepeatOutput", "NodeClosureInput",
|
|
2281
|
-
"NodeClosureOutput", "GeometryNodeSimulationInput", "GeometryNodeSimulationOutput",
|
|
2282
|
-
"GeometryNodeForeachGeometryElementInput", "GeometryNodeForeachGeometryElementOutput"}
|
|
2283
|
-
node_ignore = group_node_types | zone_node_types | {"NodeFrame", "NodeReroute"}
|
|
2284
|
-
|
|
2285
|
-
@classmethod
|
|
2286
|
-
def ignore_node(cls, node):
|
|
2287
|
-
return node.bl_idname in cls.node_ignore
|
|
2288
|
-
|
|
2289
|
-
def execute(self, context):
|
|
2290
|
-
node_active = context.active_node
|
|
2291
|
-
node_selected = context.selected_nodes
|
|
2292
|
-
active_node_name = node_active.name if node_active.select else None
|
|
2293
|
-
valid_nodes = [n for n in node_selected if not self.ignore_node(n)]
|
|
2294
|
-
|
|
2295
|
-
# Create output lists
|
|
2296
|
-
selected_node_names = [n.name for n in node_selected]
|
|
2297
|
-
success_names = []
|
|
2298
|
-
|
|
2299
|
-
# Reset all valid children in a frame
|
|
2300
|
-
node_active_is_frame = False
|
|
2301
|
-
if len(node_selected) == 1 and self.is_frame_node(node_active):
|
|
2302
|
-
node_tree = node_active.id_data
|
|
2303
|
-
children = [n for n in node_tree.nodes if n.parent == node_active]
|
|
2304
|
-
if children:
|
|
2305
|
-
valid_nodes = [n for n in children if not self.ignore_node(n)]
|
|
2306
|
-
selected_node_names = [n.name for n in children if not self.ignore_node(n)]
|
|
2307
|
-
node_active_is_frame = True
|
|
2308
|
-
|
|
2309
|
-
# Check if valid nodes in selection
|
|
2310
|
-
if not (len(valid_nodes) > 0):
|
|
2311
|
-
# Check for frames only
|
|
2312
|
-
frames_selected = [n for n in node_selected if self.is_frame_node(n)]
|
|
2313
|
-
if (len(frames_selected) > 1 and len(frames_selected) == len(node_selected)):
|
|
2314
|
-
self.report({'ERROR'}, "Please select only 1 frame to reset")
|
|
2315
|
-
else:
|
|
2316
|
-
self.report({'ERROR'}, "No valid node(s) in selection")
|
|
2317
|
-
return {'CANCELLED'}
|
|
2318
|
-
|
|
2319
|
-
# Report nodes that are not valid
|
|
2320
|
-
if len(valid_nodes) != len(node_selected) and node_active_is_frame is False:
|
|
2321
|
-
valid_node_names = [n.name for n in valid_nodes]
|
|
2322
|
-
not_valid_names = list(set(selected_node_names) - set(valid_node_names))
|
|
2323
|
-
message = rpt_("Ignored {}").format(", ".join(not_valid_names))
|
|
2324
|
-
self.report({'INFO'}, message)
|
|
2325
|
-
|
|
2326
|
-
# Deselect all nodes
|
|
2327
|
-
for i in node_selected:
|
|
2328
|
-
i.select = False
|
|
2329
|
-
|
|
2330
|
-
# Run through all valid nodes
|
|
2331
|
-
for node in valid_nodes:
|
|
2332
|
-
parent = node.parent if node.parent else None
|
|
2333
|
-
node_loc = [node.location.x, node.location.y]
|
|
2334
|
-
|
|
2335
|
-
node_tree = node.id_data
|
|
2336
|
-
props_to_copy = 'bl_idname name location height width'.split(' ')
|
|
2337
|
-
|
|
2338
|
-
reconnections = []
|
|
2339
|
-
mappings = chain.from_iterable([node.inputs, node.outputs])
|
|
2340
|
-
for i in (i for i in mappings if i.is_linked):
|
|
2341
|
-
for L in i.links:
|
|
2342
|
-
reconnections.append([L.from_socket.path_from_id(), L.to_socket.path_from_id()])
|
|
2343
|
-
|
|
2344
|
-
props = {j: getattr(node, j) for j in props_to_copy}
|
|
2345
|
-
|
|
2346
|
-
new_node = node_tree.nodes.new(props['bl_idname'])
|
|
2347
|
-
props_to_copy.pop(0)
|
|
2348
|
-
|
|
2349
|
-
for prop in props_to_copy:
|
|
2350
|
-
setattr(new_node, prop, props[prop])
|
|
2351
|
-
|
|
2352
|
-
nodes = node_tree.nodes
|
|
2353
|
-
nodes.remove(node)
|
|
2354
|
-
new_node.name = props['name']
|
|
2355
|
-
|
|
2356
|
-
if parent:
|
|
2357
|
-
new_node.parent = parent
|
|
2358
|
-
new_node.location = node_loc
|
|
2359
|
-
|
|
2360
|
-
for str_from, str_to in reconnections:
|
|
2361
|
-
connect_sockets(eval(str_from), eval(str_to))
|
|
2362
|
-
|
|
2363
|
-
new_node.select = False
|
|
2364
|
-
success_names.append(new_node.name)
|
|
2365
|
-
|
|
2366
|
-
# Reselect all nodes
|
|
2367
|
-
if selected_node_names and node_active_is_frame is False:
|
|
2368
|
-
for i in selected_node_names:
|
|
2369
|
-
node_tree.nodes[i].select = True
|
|
2370
|
-
|
|
2371
|
-
if active_node_name is not None:
|
|
2372
|
-
node_tree.nodes[active_node_name].select = True
|
|
2373
|
-
node_tree.nodes.active = node_tree.nodes[active_node_name]
|
|
2374
|
-
|
|
2375
|
-
message = rpt_("Successfully reset {}").format(", ".join(success_names))
|
|
2376
|
-
self.report({'INFO'}, message)
|
|
2377
|
-
return {'FINISHED'}
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
classes = (
|
|
2381
|
-
NWLazyMix,
|
|
2382
|
-
NWLazyConnect,
|
|
2383
|
-
NWDeleteUnused,
|
|
2384
|
-
NWSwapLinks,
|
|
2385
|
-
NWResetBG,
|
|
2386
|
-
NWAddAttrNode,
|
|
2387
|
-
NWReloadImages,
|
|
2388
|
-
NWMergeNodes,
|
|
2389
|
-
NWBatchChangeNodes,
|
|
2390
|
-
NWChangeMixFactor,
|
|
2391
|
-
NWCopySettings,
|
|
2392
|
-
NWCopyLabel,
|
|
2393
|
-
NWClearLabel,
|
|
2394
|
-
NWModifyLabels,
|
|
2395
|
-
NWAddTextureSetup,
|
|
2396
|
-
NWAddPrincipledSetup,
|
|
2397
|
-
NWAddReroutes,
|
|
2398
|
-
NWLinkActiveToSelected,
|
|
2399
|
-
NWAlignNodes,
|
|
2400
|
-
NWSelectParentChildren,
|
|
2401
|
-
NWDetachOutputs,
|
|
2402
|
-
NWLinkToOutputNode,
|
|
2403
|
-
NWMakeLink,
|
|
2404
|
-
NWCallInputsMenu,
|
|
2405
|
-
NWAddSequence,
|
|
2406
|
-
NWSaveViewer,
|
|
2407
|
-
NWResetNodes,
|
|
2408
|
-
)
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
def register():
|
|
2412
|
-
from bpy.utils import register_class
|
|
2413
|
-
for cls in classes:
|
|
2414
|
-
register_class(cls)
|
|
2415
|
-
|
|
2416
|
-
|
|
2417
|
-
def unregister():
|
|
2418
|
-
from bpy.utils import unregister_class
|
|
2419
|
-
|
|
2420
|
-
for cls in classes:
|
|
2421
|
-
unregister_class(cls)
|