Merge branch 'blender-v2.90-release' into master
This commit is contained in:
commit
8034c621fa
|
@ -1796,12 +1796,7 @@ class UndoWithContext(bpy.types.Operator):
|
|||
message: StringProperty('Undo Message', default='BlenderKit operation')
|
||||
|
||||
def execute(self, context):
|
||||
C_dict = bpy.context.copy()
|
||||
C_dict.update(region='WINDOW')
|
||||
if context.area is None or context.area.type != 'VIEW_3D':
|
||||
w, a, r = utils.get_largest_area()
|
||||
override = {'window': w, 'screen': w.screen, 'area': a, 'region': r}
|
||||
C_dict.update(override)
|
||||
C_dict = utils.get_fake_context(context)
|
||||
bpy.ops.ed.undo_push(C_dict, 'INVOKE_REGION_WIN', message=self.message)
|
||||
return {'FINISHED'}
|
||||
|
||||
|
|
|
@ -32,9 +32,6 @@ import json
|
|||
import os
|
||||
import sys
|
||||
|
||||
|
||||
|
||||
|
||||
ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000
|
||||
BELOW_NORMAL_PRIORITY_CLASS = 0x00004000
|
||||
HIGH_PRIORITY_CLASS = 0x00000080
|
||||
|
@ -42,12 +39,14 @@ IDLE_PRIORITY_CLASS = 0x00000040
|
|||
NORMAL_PRIORITY_CLASS = 0x00000020
|
||||
REALTIME_PRIORITY_CLASS = 0x00000100
|
||||
|
||||
|
||||
def get_process_flags():
|
||||
flags = BELOW_NORMAL_PRIORITY_CLASS
|
||||
if sys.platform != 'win32': # TODO test this on windows
|
||||
flags = 0
|
||||
return flags
|
||||
|
||||
|
||||
def activate(ob):
|
||||
bpy.ops.object.select_all(action='DESELECT')
|
||||
ob.select_set(True)
|
||||
|
@ -97,11 +96,12 @@ def get_selected_models():
|
|||
parents.append(ob)
|
||||
done[ob] = True
|
||||
|
||||
#if no blenderkit - like objects were found, use the original selection.
|
||||
# if no blenderkit - like objects were found, use the original selection.
|
||||
if len(parents) == 0:
|
||||
parents = obs
|
||||
return parents
|
||||
|
||||
|
||||
def get_selected_replace_adepts():
|
||||
'''
|
||||
Detect all hierarchies that contain either asset data from selection, or selected objects themselves.
|
||||
|
@ -127,11 +127,12 @@ def get_selected_replace_adepts():
|
|||
|
||||
done[ob] = True
|
||||
# print(parents)
|
||||
#if no blenderkit - like objects were found, use the original selection.
|
||||
# if no blenderkit - like objects were found, use the original selection.
|
||||
if len(parents) == 0:
|
||||
parents = obs
|
||||
return parents
|
||||
|
||||
|
||||
def get_search_props():
|
||||
scene = bpy.context.scene
|
||||
if scene is None:
|
||||
|
@ -238,7 +239,7 @@ def load_prefs():
|
|||
|
||||
def save_prefs(self, context):
|
||||
# first check context, so we don't do this on registration or blender startup
|
||||
if not bpy.app.background: #(hasattr kills blender)
|
||||
if not bpy.app.background: # (hasattr kills blender)
|
||||
user_preferences = bpy.context.preferences.addons['blenderkit'].preferences
|
||||
# we test the api key for length, so not a random accidentally typed sequence gets saved.
|
||||
lk = len(user_preferences.api_key)
|
||||
|
@ -263,16 +264,18 @@ def save_prefs(self, context):
|
|||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
def get_hidden_texture(tpath, bdata_name, force_reload = False):
|
||||
i = get_hidden_image(tpath, bdata_name, force_reload = force_reload)
|
||||
|
||||
def get_hidden_texture(tpath, bdata_name, force_reload=False):
|
||||
i = get_hidden_image(tpath, bdata_name, force_reload=force_reload)
|
||||
bdata_name = f".{bdata_name}"
|
||||
t = bpy.data.textures.get(bdata_name)
|
||||
if t is None:
|
||||
t = bpy.data.textures.new('.test', 'IMAGE')
|
||||
if t.image!= i:
|
||||
if t.image != i:
|
||||
t.image = i
|
||||
return t
|
||||
|
||||
|
||||
def get_hidden_image(tpath, bdata_name, force_reload=False):
|
||||
hidden_name = '.%s' % bdata_name
|
||||
img = bpy.data.images.get(hidden_name)
|
||||
|
@ -348,16 +351,19 @@ def get_hierarchy(ob):
|
|||
obs.append(o)
|
||||
return obs
|
||||
|
||||
def select_hierarchy(ob, state = True):
|
||||
|
||||
def select_hierarchy(ob, state=True):
|
||||
obs = get_hierarchy(ob)
|
||||
for ob in obs:
|
||||
ob.select_set(state)
|
||||
return obs
|
||||
|
||||
|
||||
def delete_hierarchy(ob):
|
||||
obs = get_hierarchy(ob)
|
||||
bpy.ops.object.delete({"selected_objects": obs})
|
||||
|
||||
|
||||
def get_bounds_snappable(obs, use_modifiers=False):
|
||||
# progress('getting bounds of object(s)')
|
||||
parent = obs[0]
|
||||
|
@ -473,13 +479,15 @@ def get_headers(api_key):
|
|||
headers["Authorization"] = "Bearer %s" % api_key
|
||||
return headers
|
||||
|
||||
|
||||
def scale_2d(v, s, p):
|
||||
'''scale a 2d vector with a pivot'''
|
||||
return (p[0] + s[0] * (v[0] - p[0]), p[1] + s[1] * (v[1] - p[1]))
|
||||
|
||||
def scale_uvs(ob, scale = 1.0, pivot = Vector((.5,.5))):
|
||||
|
||||
def scale_uvs(ob, scale=1.0, pivot=Vector((.5, .5))):
|
||||
mesh = ob.data
|
||||
if len(mesh.uv_layers)>0:
|
||||
if len(mesh.uv_layers) > 0:
|
||||
uv = mesh.uv_layers[mesh.uv_layers.active_index]
|
||||
|
||||
# Scale a UV map iterating over its coordinates to a given scale and with a pivot point
|
||||
|
@ -488,7 +496,7 @@ def scale_uvs(ob, scale = 1.0, pivot = Vector((.5,.5))):
|
|||
|
||||
|
||||
# map uv cubic and switch of auto tex space and set it to 1,1,1
|
||||
def automap(target_object=None, target_slot=None, tex_size=1, bg_exception=False, just_scale = False):
|
||||
def automap(target_object=None, target_slot=None, tex_size=1, bg_exception=False, just_scale=False):
|
||||
from blenderkit import bg_blender as bg
|
||||
s = bpy.context.scene
|
||||
mat_props = s.blenderkit_mat
|
||||
|
@ -540,9 +548,10 @@ def automap(target_object=None, target_slot=None, tex_size=1, bg_exception=False
|
|||
# by now, it takes the basic uv map = 1 meter. also, it now doeasn't respect more materials on one object,
|
||||
# it just scales whole UV.
|
||||
if just_scale:
|
||||
scale_uvs(tob, scale=Vector((1/tex_size, 1/tex_size)))
|
||||
scale_uvs(tob, scale=Vector((1 / tex_size, 1 / tex_size)))
|
||||
bpy.context.view_layer.objects.active = actob
|
||||
|
||||
|
||||
def name_update():
|
||||
props = get_upload_props()
|
||||
if props.name_old != props.name:
|
||||
|
@ -562,12 +571,14 @@ def name_update():
|
|||
asset = get_active_asset()
|
||||
asset.name = fname
|
||||
|
||||
|
||||
def params_to_dict(params):
|
||||
params_dict = {}
|
||||
for p in params:
|
||||
params_dict[p['parameterType']] = p['value']
|
||||
return params_dict
|
||||
|
||||
|
||||
def dict_to_params(inputs, parameters=None):
|
||||
if parameters == None:
|
||||
parameters = []
|
||||
|
@ -605,6 +616,7 @@ def profile_is_validator():
|
|||
return True
|
||||
return False
|
||||
|
||||
|
||||
def guard_from_crash():
|
||||
'''Blender tends to crash when trying to run some functions with the addon going through unregistration process.'''
|
||||
if bpy.context.preferences.addons.get('blenderkit') is None:
|
||||
|
@ -614,7 +626,7 @@ def guard_from_crash():
|
|||
return True
|
||||
|
||||
|
||||
def get_largest_area( area_type = 'VIEW_3D'):
|
||||
def get_largest_area(area_type='VIEW_3D'):
|
||||
maxsurf = 0
|
||||
maxa = None
|
||||
maxw = None
|
||||
|
@ -637,11 +649,12 @@ def get_largest_area( area_type = 'VIEW_3D'):
|
|||
active_region = region
|
||||
return maxw, maxa, region
|
||||
|
||||
def get_fake_context(context, area_type = 'VIEW_3D'):
|
||||
C_dict = context.copy()
|
||||
|
||||
def get_fake_context(context, area_type='VIEW_3D'):
|
||||
C_dict = {} # context.copy() #context.copy was a source of problems - incompatibility with addons that also define context
|
||||
C_dict.update(region='WINDOW')
|
||||
if context.area is None or context.area.type != area_type:
|
||||
w, a, r = get_largest_area(area_type = area_type)
|
||||
w, a, r = get_largest_area(area_type=area_type)
|
||||
|
||||
override = {'window': w, 'screen': w.screen, 'area': a, 'region': r}
|
||||
C_dict.update(override)
|
||||
|
@ -675,4 +688,4 @@ def label_multiline(layout, text='', icon='NONE', width=-1):
|
|||
if li > maxlines:
|
||||
break;
|
||||
layout.label(text=l, icon=icon)
|
||||
icon = 'NONE'
|
||||
icon = 'NONE'
|
||||
|
|
Loading…
Reference in New Issue