Pose Library: Update to use the asset shelf (when enabled) #104546
@ -1,7 +1,9 @@
|
||||
name: Add-on Bug Report
|
||||
about: File a bug report for an add-on bundled with Blender
|
||||
labels:
|
||||
- type::Report
|
||||
- "Type/Report"
|
||||
- "Status/Needs Triage"
|
||||
- "Priority/Normal"
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
|
@ -6,7 +6,7 @@ bl_info = {
|
||||
"version": (4, 37, 5),
|
||||
"blender": (3, 4, 0),
|
||||
"location": "File > Import-Export",
|
||||
"description": "FBX IO meshes, UV's, vertex colors, materials, textures, cameras, lamps and actions",
|
||||
"description": "FBX IO meshes, UVs, vertex colors, materials, textures, cameras, lamps and actions",
|
||||
"warning": "",
|
||||
"doc_url": "{BLENDER_MANUAL_URL}/addons/import_export/scene_fbx.html",
|
||||
"support": 'OFFICIAL',
|
||||
|
@ -1068,7 +1068,7 @@ def blen_read_geom_layer_color(fbx_obj, mesh, colors_type):
|
||||
use_srgb = colors_type == 'SRGB'
|
||||
layer_type = 'BYTE_COLOR' if use_srgb else 'FLOAT_COLOR'
|
||||
color_prop_name = "color_srgb" if use_srgb else "color"
|
||||
# almost same as UV's
|
||||
# almost same as UVs
|
||||
for layer_id in (b'LayerElementColor',):
|
||||
for fbx_layer in elem_find_iter(fbx_obj, layer_id):
|
||||
# all should be valid
|
||||
|
@ -4,7 +4,7 @@
|
||||
bl_info = {
|
||||
'name': 'glTF 2.0 format',
|
||||
'author': 'Julien Duroure, Scurest, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors',
|
||||
"version": (3, 6, 3),
|
||||
"version": (3, 6, 4),
|
||||
'blender': (3, 5, 0),
|
||||
'location': 'File > Import-Export',
|
||||
'description': 'Import-Export as glTF 2.0',
|
||||
@ -272,7 +272,7 @@ class ExportGLTF2_Base(ConvertGLTF2_Base):
|
||||
|
||||
export_draco_generic_quantization: IntProperty(
|
||||
name='Generic quantization bits',
|
||||
description='Quantization bits for generic coordinate values like weights or joints (0 = no quantization)',
|
||||
description='Quantization bits for generic values like weights or joints (0 = no quantization)',
|
||||
default=12,
|
||||
min=0,
|
||||
max=30
|
||||
|
@ -857,7 +857,7 @@ class PrimitiveCreator:
|
||||
# Morph tangent are after these 3 others, so, they are already calculated
|
||||
self.normals = self.attributes[attr['gltf_attribute_name_normal']]["data"]
|
||||
self.morph_normals = self.attributes[attr['gltf_attribute_name_morph_normal']]["data"]
|
||||
self.tangent = self.attributes[attr['gltf_attribute_name_tangent']]["data"]
|
||||
self.tangents = self.attributes[attr['gltf_attribute_name_tangent']]["data"]
|
||||
|
||||
self.__calc_morph_tangents()
|
||||
self.attributes[attr['gltf_attribute_name']] = {}
|
||||
@ -865,18 +865,18 @@ class PrimitiveCreator:
|
||||
|
||||
def __calc_morph_tangents(self):
|
||||
# TODO: check if this works
|
||||
self.morph_tangent_deltas = np.empty((len(self.normals), 3), dtype=np.float32)
|
||||
self.morph_tangents = np.empty((len(self.normals), 3), dtype=np.float32)
|
||||
|
||||
for i in range(len(self.normals)):
|
||||
n = Vector(self.normals[i])
|
||||
morph_n = n + Vector(self.morph_normal_deltas[i]) # convert back to non-delta
|
||||
morph_n = n + Vector(self.morph_normals[i]) # convert back to non-delta
|
||||
t = Vector(self.tangents[i, :3])
|
||||
|
||||
rotation = morph_n.rotation_difference(n)
|
||||
|
||||
t_morph = Vector(t)
|
||||
t_morph.rotate(rotation)
|
||||
self.morph_tangent_deltas[i] = t_morph - t # back to delta
|
||||
self.morph_tangents[i] = t_morph - t # back to delta
|
||||
|
||||
def __set_regular_attribute(self, attr):
|
||||
res = np.empty((len(self.prim_dots), attr['len']), dtype=attr['type'])
|
||||
|
@ -6,7 +6,7 @@ bl_info = {
|
||||
"version": (3, 9, 0),
|
||||
"blender": (3, 0, 0),
|
||||
"location": "File > Import-Export",
|
||||
"description": "Import-Export OBJ, Import OBJ mesh, UV's, materials and textures",
|
||||
"description": "Import-Export OBJ, Import OBJ mesh, UVs, materials and textures",
|
||||
"warning": "",
|
||||
"doc_url": "{BLENDER_MANUAL_URL}/addons/import_export/scene_obj.html",
|
||||
"support": 'OFFICIAL',
|
||||
|
@ -452,10 +452,10 @@ def write_file(filepath, objects, depsgraph, scene,
|
||||
uv_ls = uv_face_mapping[f_index] = []
|
||||
for uv_index, l_index in enumerate(f.loop_indices):
|
||||
uv = uv_layer[l_index].uv
|
||||
# include the vertex index in the key so we don't share UV's between vertices,
|
||||
# include the vertex index in the key so we don't share UVs between vertices,
|
||||
# allowed by the OBJ spec but can cause issues for other importers, see: T47010.
|
||||
|
||||
# this works too, shared UV's for all verts
|
||||
# this works too, shared UVs for all verts
|
||||
#~ uv_key = veckey2d(uv)
|
||||
uv_key = loops[l_index].vertex_index, veckey2d(uv)
|
||||
|
||||
@ -596,7 +596,7 @@ def write_file(filepath, objects, depsgraph, scene,
|
||||
|
||||
face_vert_index += len(f_v)
|
||||
|
||||
else: # No UV's
|
||||
else: # No UVs
|
||||
if EXPORT_NORMALS:
|
||||
for vi, v, li in f_v:
|
||||
fw(" %d//%d" % (totverts + v.index, totno + loops_to_normals[li]))
|
||||
|
@ -64,7 +64,7 @@ class _Properties:
|
||||
)
|
||||
scene.muv_select_uv_sync_mesh_selection = BoolProperty(
|
||||
name="Sync Mesh Selection",
|
||||
description="Select the mesh's faces as well as UV's faces",
|
||||
description="Select the mesh's faces as well as UVs' faces",
|
||||
default=False
|
||||
)
|
||||
|
||||
@ -106,7 +106,7 @@ class MUV_OT_SelectUV_SelectOverlapped(bpy.types.Operator):
|
||||
)
|
||||
sync_mesh_selection = BoolProperty(
|
||||
name="Sync Mesh Selection",
|
||||
description="Select mesh's faces as well as UV's faces",
|
||||
description="Select the mesh's faces as well as UVs' faces",
|
||||
default=False
|
||||
)
|
||||
|
||||
@ -199,7 +199,7 @@ class MUV_OT_SelectUV_SelectFlipped(bpy.types.Operator):
|
||||
)
|
||||
sync_mesh_selection = BoolProperty(
|
||||
name="Sync Mesh Selection",
|
||||
description="Select mesh's faces as well as UV's faces",
|
||||
description="Select the mesh's faces as well as UVs' faces",
|
||||
default=False
|
||||
)
|
||||
|
||||
|
@ -2020,7 +2020,7 @@ class NWMergeNodes(Operator, NWBase):
|
||||
mode = 'MIX'
|
||||
if (merge_type != 'MATH' and merge_type != 'GEOMETRY') and tree_type == 'GEOMETRY':
|
||||
merge_type = 'AUTO'
|
||||
# The MixRGB node and math nodes used for geometry nodes are of type 'ShaderNode'
|
||||
# The Mix node and math nodes used for geometry nodes are of type 'ShaderNode'
|
||||
if (merge_type == 'MATH' or merge_type == 'MIX') and tree_type == 'GEOMETRY':
|
||||
node_type = 'ShaderNode'
|
||||
selected_mix = [] # entry = [index, loc]
|
||||
@ -2119,8 +2119,13 @@ class NWMergeNodes(Operator, NWBase):
|
||||
was_multi = False
|
||||
for i in range(the_range):
|
||||
if nodes_list == selected_mix:
|
||||
add_type = node_type + 'MixRGB'
|
||||
mix_name = 'Mix'
|
||||
if tree_type == 'COMPOSITING':
|
||||
mix_name = 'MixRGB'
|
||||
add_type = node_type + mix_name
|
||||
add = nodes.new(add_type)
|
||||
if tree_type != 'COMPOSITING':
|
||||
add.data_type = 'RGBA'
|
||||
add.blend_type = mode
|
||||
if mode != 'MIX':
|
||||
add.inputs[0].default_value = 1.0
|
||||
@ -2128,6 +2133,9 @@ class NWMergeNodes(Operator, NWBase):
|
||||
add.hide = do_hide
|
||||
if do_hide:
|
||||
loc_y = loc_y - 50
|
||||
first = 6
|
||||
second = 7
|
||||
if tree_type == 'COMPOSITING':
|
||||
first = 1
|
||||
second = 2
|
||||
add.width_hidden = 100.0
|
||||
@ -2290,7 +2298,7 @@ class NWBatchChangeNodes(Operator, NWBase):
|
||||
blend_type = self.blend_type
|
||||
operation = self.operation
|
||||
for node in context.selected_nodes:
|
||||
if node.type == 'MIX_RGB' or node.bl_idname == 'GeometryNodeAttributeMix':
|
||||
if node.type == 'MIX_RGB' or (node.bl_idname == 'ShaderNodeMix' and node.data_type == 'RGBA'):
|
||||
if not blend_type in [nav[0] for nav in navs]:
|
||||
node.blend_type = blend_type
|
||||
else:
|
||||
@ -2309,7 +2317,7 @@ class NWBatchChangeNodes(Operator, NWBase):
|
||||
else:
|
||||
node.blend_type = blend_types[index - 1][0]
|
||||
|
||||
if node.type == 'MATH' or node.bl_idname == 'GeometryNodeAttributeMath':
|
||||
if node.type == 'MATH' or node.bl_idname == 'ShaderNodeMath':
|
||||
if not operation in [nav[0] for nav in navs]:
|
||||
node.operation = operation
|
||||
else:
|
||||
@ -2349,7 +2357,7 @@ class NWChangeMixFactor(Operator, NWBase):
|
||||
selected = [] # entry = index
|
||||
for si, node in enumerate(nodes):
|
||||
if node.select:
|
||||
if node.type in {'MIX_RGB', 'MIX_SHADER'}:
|
||||
if node.type in {'MIX_RGB', 'MIX_SHADER'} or node.bl_idname == 'ShaderNodeMix':
|
||||
selected.append(si)
|
||||
|
||||
for si in selected:
|
||||
|
@ -4,8 +4,8 @@ bl_info = {
|
||||
"name": "Hotkey: 'Ctrl Alt S' ",
|
||||
"description": "Switch Editor Type Menu",
|
||||
"author": "saidenka, meta-androcto",
|
||||
"version": (0, 1, 1),
|
||||
"blender": (2, 80, 0),
|
||||
"version": (0, 1, 2),
|
||||
"blender": (3, 40, 1),
|
||||
"location": "All Editors",
|
||||
"warning": "",
|
||||
"doc_url": "",
|
||||
@ -64,7 +64,7 @@ class PIE_MT_AreaTypePieOther(Menu):
|
||||
self.layout.operator(
|
||||
PIE_OT_SetAreaType.bl_idname,
|
||||
text="File Browser",
|
||||
icon="FILEBROWSER").types = "FILE_BROWSER"
|
||||
icon="FILEBROWSER").types = "FILES"
|
||||
self.layout.operator(PIE_OT_SetAreaType.bl_idname, text="Preferences",
|
||||
icon="PREFERENCES").types = "PREFERENCES"
|
||||
self.layout.operator(PIE_OT_SetAreaType.bl_idname, text="Text Editor", icon="TEXT").types = "TEXT_EDITOR"
|
||||
|
@ -3,7 +3,7 @@
|
||||
bl_info = {
|
||||
"name": "VR Scene Inspection",
|
||||
"author": "Julian Eisel (Severin), Sebastian Koenig, Peter Kim (muxed-reality)",
|
||||
"version": (0, 11, 1),
|
||||
"version": (0, 11, 2),
|
||||
"blender": (3, 2, 0),
|
||||
"location": "3D View > Sidebar > VR",
|
||||
"description": ("View the viewport with virtual reality glasses "
|
||||
|
@ -7,6 +7,7 @@ else:
|
||||
from . import properties
|
||||
|
||||
import bpy
|
||||
from bpy.app.translations import pgettext_iface as iface_
|
||||
from bpy.types import (
|
||||
Menu,
|
||||
Panel,
|
||||
@ -37,12 +38,10 @@ class VIEW3D_PT_vr_session(Panel):
|
||||
|
||||
# Using SNAP_FACE because it looks like a stop icon -- I shouldn't
|
||||
# have commit rights...
|
||||
toggle_info = (
|
||||
("Start VR Session", 'PLAY') if not is_session_running else (
|
||||
"Stop VR Session", 'SNAP_FACE')
|
||||
)
|
||||
layout.operator("wm.xr_session_toggle",
|
||||
text=toggle_info[0], icon=toggle_info[1])
|
||||
toggle_info = ((iface_("Start VR Session"), 'PLAY') if not is_session_running
|
||||
else (iface_("Stop VR Session"), 'SNAP_FACE'))
|
||||
layout.operator("wm.xr_session_toggle", text=toggle_info[0],
|
||||
translate=False, icon=toggle_info[1])
|
||||
|
||||
layout.separator()
|
||||
|
||||
|
@ -8,6 +8,7 @@ else:
|
||||
|
||||
import bpy
|
||||
import gpu
|
||||
from bpy.app.translations import pgettext_data as data_
|
||||
from bpy.types import (
|
||||
Gizmo,
|
||||
GizmoGroup,
|
||||
@ -117,8 +118,8 @@ class VIEW3D_OT_vr_camera_landmark_from_session(Operator):
|
||||
loc = wm.xr_session_state.viewer_pose_location
|
||||
rot = wm.xr_session_state.viewer_pose_rotation.to_euler()
|
||||
|
||||
cam = bpy.data.cameras.new("Camera_" + lm.name)
|
||||
new_cam = bpy.data.objects.new("Camera_" + lm.name, cam)
|
||||
cam = bpy.data.cameras.new(data_("Camera") + "_" + lm.name)
|
||||
new_cam = bpy.data.objects.new(data_("Camera") + "_" + lm.name, cam)
|
||||
scene.collection.objects.link(new_cam)
|
||||
new_cam.location = loc
|
||||
new_cam.rotation_euler = rot
|
||||
@ -215,8 +216,8 @@ class VIEW3D_OT_add_camera_from_vr_landmark(Operator):
|
||||
scene = context.scene
|
||||
lm = properties.VRLandmark.get_selected_landmark(context)
|
||||
|
||||
cam = bpy.data.cameras.new("Camera_" + lm.name)
|
||||
new_cam = bpy.data.objects.new("Camera_" + lm.name, cam)
|
||||
cam = bpy.data.cameras.new(data_("Camera") + "_" + lm.name)
|
||||
new_cam = bpy.data.objects.new(data_("Camera") + "_" + lm.name, cam)
|
||||
scene.collection.objects.link(new_cam)
|
||||
angle = lm.base_pose_angle
|
||||
new_cam.location = lm.base_pose_location
|
||||
|
Loading…
Reference in New Issue
Block a user