BlenderKit: move search props to window manager

This commit is contained in:
Vilem Duha 2021-07-26 16:38:05 +02:00
parent 89ce3f1e1c
commit 0d6b2e8767
6 changed files with 85 additions and 79 deletions

View File

@ -1841,7 +1841,7 @@ def register():
type=BlenderKitUIProps)
# MODELS
bpy.types.Scene.blenderkit_models = PointerProperty(
bpy.types.WindowManager.blenderkit_models = PointerProperty(
type=BlenderKitModelSearchProps)
bpy.types.Object.blenderkit = PointerProperty( # for uploads, not now...
type=BlenderKitModelUploadProps)
@ -1849,7 +1849,7 @@ def register():
type=BlenderKitRatingProps)
# SCENES
bpy.types.Scene.blenderkit_scene = PointerProperty(
bpy.types.WindowManager.blenderkit_scene = PointerProperty(
type=BlenderKitSceneSearchProps)
bpy.types.Scene.blenderkit = PointerProperty( # for uploads, not now...
type=BlenderKitSceneUploadProps)
@ -1857,7 +1857,7 @@ def register():
type=BlenderKitRatingProps)
# HDRs
bpy.types.Scene.blenderkit_HDR = PointerProperty(
bpy.types.WindowManager.blenderkit_HDR = PointerProperty(
type=BlenderKitHDRSearchProps)
bpy.types.Image.blenderkit = PointerProperty( # for uploads, not now...
type=BlenderKitHDRUploadProps)
@ -1865,7 +1865,7 @@ def register():
type=BlenderKitRatingProps)
# MATERIALS
bpy.types.Scene.blenderkit_mat = PointerProperty(
bpy.types.WindowManager.blenderkit_mat = PointerProperty(
type=BlenderKitMaterialSearchProps)
bpy.types.Material.blenderkit = PointerProperty( # for uploads, not now...
type=BlenderKitMaterialUploadProps)
@ -1873,7 +1873,7 @@ def register():
type=BlenderKitRatingProps)
# BRUSHES
bpy.types.Scene.blenderkit_brush = PointerProperty(
bpy.types.WindowManager.blenderkit_brush = PointerProperty(
type=BlenderKitBrushSearchProps)
bpy.types.Brush.blenderkit = PointerProperty( # for uploads, not now...
type=BlenderKitBrushUploadProps)
@ -1930,11 +1930,11 @@ def unregister():
tasks_queue.unregister()
asset_bar_op.unregister()
del bpy.types.Scene.blenderkit_models
del bpy.types.Scene.blenderkit_scene
del bpy.types.Scene.blenderkit_HDR
del bpy.types.Scene.blenderkit_brush
del bpy.types.Scene.blenderkit_mat
del bpy.types.WindowManager.blenderkit_models
del bpy.types.WindowManager.blenderkit_scene
del bpy.types.WindowManager.blenderkit_HDR
del bpy.types.WindowManager.blenderkit_brush
del bpy.types.WindowManager.blenderkit_mat
del bpy.types.Scene.blenderkit
del bpy.types.Object.blenderkit

View File

@ -305,14 +305,14 @@ def append_asset(asset_data, **kwargs): # downloaders=[], location=None,
# how to do particle drop:
# link the group we are interested in( there are more groups in File!!!! , have to get the correct one!)
s = bpy.context.scene
wm = bpy.context.window_manager
user_preferences = bpy.context.preferences.addons['blenderkit'].preferences
if user_preferences.api_key == '':
user_preferences.asset_counter += 1
if asset_data['assetType'] == 'scene':
sprops = s.blenderkit_scene
sprops = wm.blenderkit_scene
scene = append_link.append_scene(file_names[0], link=sprops.append_link == 'LINK', fake_user=False)
# print('scene appended')
@ -330,7 +330,7 @@ def append_asset(asset_data, **kwargs): # downloaders=[], location=None,
if asset_data['assetType'] == 'model':
downloaders = kwargs.get('downloaders')
sprops = s.blenderkit_models
sprops = wm.blenderkit_models
# TODO this is here because combinations of linking objects or appending groups are rather not-usefull
if sprops.append_method == 'LINK_COLLECTION':
sprops.append_link = 'LINK'
@ -468,7 +468,7 @@ def append_asset(asset_data, **kwargs): # downloaders=[], location=None,
elif asset_data['assetType'] == 'material':
inscene = False
sprops = s.blenderkit_mat
sprops = wm.blenderkit_mat
for m in bpy.data.materials:
if m.blenderkit.id == asset_data['id']:

View File

@ -447,7 +447,6 @@ def search_timer():
wm[search_name + ' orig'] = rdata
wm['search results orig'] = rdata
# load_previews()
if len(result_field) < ui_props.scrolloffset or not (thread[0].params.get('get_next')):
# jump back
ui_props.scrolloffset = 0
@ -1090,7 +1089,7 @@ def build_query_common(query, props):
def build_query_model():
'''use all search input to request results from server'''
props = bpy.context.scene.blenderkit_models
props = bpy.context.window_manager.blenderkit_models
query = {
"asset_type": 'model',
# "engine": props.search_engine,
@ -1127,7 +1126,7 @@ def build_query_model():
def build_query_scene():
'''use all search input to request results from server'''
props = bpy.context.scene.blenderkit_scene
props = bpy.context.window_manager.blenderkit_scene
query = {
"asset_type": 'scene',
# "engine": props.search_engine,
@ -1140,7 +1139,7 @@ def build_query_scene():
def build_query_HDR():
'''use all search input to request results from server'''
props = bpy.context.scene.blenderkit_HDR
props = bpy.context.window_manager.blenderkit_HDR
query = {
"asset_type": 'hdr',
# "engine": props.search_engine,
@ -1151,7 +1150,7 @@ def build_query_HDR():
def build_query_material():
props = bpy.context.scene.blenderkit_mat
props = bpy.context.window_manager.blenderkit_mat
query = {
"asset_type": 'material',
@ -1206,7 +1205,7 @@ def build_query_texture():
def build_query_brush():
props = bpy.context.scene.blenderkit_brush
props = bpy.context.window_manager.blenderkit_brush
brush_type = ''
if bpy.context.sculpt_object is not None:
@ -1317,38 +1316,39 @@ def search(category='', get_next=False, author_id=''):
search_start_time = time.time()
# mt('start')
scene = bpy.context.scene
wm = bpy.context.window_manager
ui_props = scene.blenderkitUI
props = utils.get_search_props()
if ui_props.asset_type == 'MODEL':
if not hasattr(scene, 'blenderkit'):
if not hasattr(wm, 'blenderkit_models'):
return;
query = build_query_model()
if ui_props.asset_type == 'SCENE':
if not hasattr(scene, 'blenderkit_scene'):
if not hasattr(wm, 'blenderkit_scene'):
return;
query = build_query_scene()
if ui_props.asset_type == 'HDR':
if not hasattr(scene, 'blenderkit_HDR'):
if not hasattr(wm, 'blenderkit_HDR'):
return;
query = build_query_HDR()
if ui_props.asset_type == 'MATERIAL':
if not hasattr(scene, 'blenderkit_mat'):
if not hasattr(wm, 'blenderkit_mat'):
return;
query = build_query_material()
if ui_props.asset_type == 'TEXTURE':
if not hasattr(scene, 'blenderkit_tex'):
if not hasattr(wm, 'blenderkit_tex'):
return;
# props = scene.blenderkit_tex
# query = build_query_texture()
if ui_props.asset_type == 'BRUSH':
if not hasattr(scene, 'blenderkit_brush'):
if not hasattr(wm, 'blenderkit_brush'):
return;
query = build_query_brush()
@ -1464,7 +1464,7 @@ def search_update(self, context):
# return here since writing into search keywords triggers this update function once more.
return
print('search update search')
# print('search update search')
search()

View File

@ -818,7 +818,7 @@ def mouse_raycast(context, mx, my):
# rote = mathutils.Euler((0, 0, math.pi))
randoffset = math.pi
if has_hit:
props = bpy.context.scene.blenderkit_models
props = bpy.context.window_manager.blenderkit_models
up = Vector((0, 0, 1))
if props.perpendicular_snap:
@ -874,7 +874,7 @@ def floor_raycast(context, mx, my):
object = None
matrix = None
snapped_rotation = snapped_normal.to_track_quat('Z', 'Y').to_euler()
props = bpy.context.scene.blenderkit_models
props = bpy.context.window_manager.blenderkit_models
if props.randomize_rotation:
randoffset = props.offset_rotation_amount + math.pi + (
random.random() - 0.5) * props.randomize_rotation_amount
@ -1680,7 +1680,8 @@ class AssetDragOperator(bpy.types.Operator):
target_object = object.name
target_slot = object.active_material_index
self.snapped_location = object.location
elif self.object_name is not None:
elif self.object_name is not None and self.has_hit:
# first, test if object can have material applied.
object = bpy.data.objects[self.object_name]
# this enables to run Bring to scene automatically when dropping on a linked objects.
@ -1696,9 +1697,7 @@ class AssetDragOperator(bpy.types.Operator):
# create final mesh to extract correct material slot
depsgraph = bpy.context.evaluated_depsgraph_get()
object_eval = object.evaluated_get(depsgraph)
temp_mesh = object_eval.to_mesh()
target_slot = temp_mesh.polygons[self.face_index].material_index
object_eval.to_mesh_clear()
if object.type == 'MESH':
temp_mesh = object_eval.to_mesh()
target_slot = temp_mesh.polygons[self.face_index].material_index
@ -1780,10 +1779,10 @@ class AssetDragOperator(bpy.types.Operator):
self.mouse_y = event.mouse_region_y
#are we dragging already?
self.drag = False
drag_threshold = 10
if abs(self.start_mouse_x - self.mouse_x) > drag_threshold and \
abs(self.start_mouse_y - self.mouse_y) > drag_threshold:
if not self.drag and \
(abs(self.start_mouse_x - self.mouse_x) > drag_threshold or \
abs(self.start_mouse_y - self.mouse_y) > drag_threshold):
self.drag = True
#turn off asset bar here, shout start again after finishing drag drop.
ui_props.turn_off = True
@ -1801,7 +1800,7 @@ class AssetDragOperator(bpy.types.Operator):
ui_props.dragging = False
return {'CANCELLED'}
sprops = bpy.context.scene.blenderkit_models
sprops = bpy.context.window_manager.blenderkit_models
if event.type == 'WHEELUPMOUSE':
sprops.offset_rotation_amount += sprops.offset_rotation_step
return {'RUNNING_MODAL'}
@ -1841,7 +1840,7 @@ class AssetDragOperator(bpy.types.Operator):
return {'FINISHED'}
self.steps +=1
return {'PASS_THROUGH'}
return {'RUNNING_MODAL'}
def invoke(self, context, event):
if context.area.type == 'VIEW_3D':
@ -1884,6 +1883,7 @@ class AssetDragOperator(bpy.types.Operator):
bpy.context.window.cursor_set("NONE")
ui_props = bpy.context.scene.blenderkitUI
ui_props.dragging = True
self.drag = False
context.window_manager.modal_handler_add(self)
return {'RUNNING_MODAL'}
else:

View File

@ -198,7 +198,8 @@ def draw_panel_hdr_upload(self, context):
def draw_panel_hdr_search(self, context):
s = context.scene
props = s.blenderkit_HDR
wm = context.window_manager
props = wm.blenderkit_HDR
layout = self.layout
row = layout.row()
@ -211,7 +212,7 @@ def draw_panel_hdr_search(self, context):
def draw_thumbnail_upload_panel(layout, props):
update = False
tex = autothumb.get_texture_ui(props.thumbnail, '.upload_preview')
tex = autothumb.get_texture_ui(props.thumbnail, 'upload_preview')
if not tex or not tex.image:
return
box = layout.box()
@ -346,9 +347,9 @@ def draw_assetbar_show_hide(layout, props):
def draw_panel_model_search(self, context):
s = context.scene
wm = bpy.context.window_manager
props = wm.blenderkit_models
props = s.blenderkit_models
layout = self.layout
row = layout.row()
@ -377,8 +378,8 @@ def draw_panel_model_search(self, context):
def draw_panel_scene_search(self, context):
s = context.scene
props = s.blenderkit_scene
wm = bpy.context.window_manager
props = wm.blenderkit_scene
layout = self.layout
# layout.label(text = "common search properties:")
row = layout.row()
@ -677,7 +678,7 @@ def draw_panel_material_upload(self, context):
def draw_panel_material_search(self, context):
wm = context.scene
wm = context.window_manager
props = wm.blenderkit_mat
layout = self.layout
@ -713,8 +714,8 @@ def draw_panel_brush_upload(self, context):
def draw_panel_brush_search(self, context):
s = context.scene
props = s.blenderkit_brush
wm = context.window_manager
props = wm.blenderkit_brush
layout = self.layout
row = layout.row()
@ -773,9 +774,9 @@ class VIEW3D_PT_blenderkit_advanced_model_search(Panel):
return ui_props.down_up == 'SEARCH' and ui_props.asset_type == 'MODEL'
def draw(self, context):
s = context.scene
wm = bpy.context.window_manager
props = s.blenderkit_models
props = wm.blenderkit_models
layout = self.layout
layout.separator()
@ -842,9 +843,8 @@ class VIEW3D_PT_blenderkit_advanced_material_search(Panel):
return ui_props.down_up == 'SEARCH' and ui_props.asset_type == 'MATERIAL'
def draw(self, context):
s = context.scene
props = s.blenderkit_mat
wm = context.window_manager
props = wm.blenderkit_mat
layout = self.layout
layout.separator()
@ -892,8 +892,8 @@ class VIEW3D_PT_blenderkit_categories(Panel):
draw_panel_categories(self, context)
def draw_scene_import_settings(self, context):
s = context.scene
props = s.blenderkit_scene
wm = bpy.context.window_manager
props = wm.blenderkit_scene
layout = self.layout
layout.prop(props, 'switch_after_append')
# layout.label(text='Import method:')
@ -920,11 +920,12 @@ class VIEW3D_PT_blenderkit_import_settings(Panel):
layout = self.layout
s = context.scene
wm = bpy.context.window_manager
ui_props = s.blenderkitUI
if ui_props.asset_type == 'MODEL':
# noinspection PyCallByClass
props = s.blenderkit_models
props = wm.blenderkit_models
layout.prop(props, 'randomize_rotation')
if props.randomize_rotation:
layout.prop(props, 'randomize_rotation_amount')
@ -937,7 +938,7 @@ class VIEW3D_PT_blenderkit_import_settings(Panel):
row.prop(props, 'append_method', expand=True, icon_only=False)
if ui_props.asset_type == 'MATERIAL':
props = s.blenderkit_mat
props = wm.blenderkit_mat
layout.prop(props, 'automap')
layout.label(text='Import method:')
row = layout.row()
@ -947,7 +948,7 @@ class VIEW3D_PT_blenderkit_import_settings(Panel):
draw_scene_import_settings(self,context)
if ui_props.asset_type == 'HDR':
props = s.blenderkit_HDR
props = wm.blenderkit_HDR
if ui_props.asset_type in ['MATERIAL', 'MODEL', 'HDR']:
layout.prop(props, 'resolution')
@ -1162,8 +1163,8 @@ class BlenderKitWelcomeOperator(bpy.types.Operator):
random_search = random.choice(random_searches)
ui_props.asset_type = random_search[0]
bpy.context.scene.blenderkit_mat.search_keywords = ''#random_search[1]
bpy.context.scene.blenderkit_mat.search_keywords = '+is_free:true+score_gte:1000+order:-created'#random_search[1]
bpy.context.window_manager.blenderkit_mat.search_keywords = ''#random_search[1]
bpy.context.window_manager.blenderkit_mat.search_keywords = '+is_free:true+score_gte:1000+order:-created'#random_search[1]
# search.search()
return {'FINISHED'}
@ -1395,7 +1396,10 @@ class OBJECT_MT_blenderkit_asset_menu(bpy.types.Menu):
def numeric_to_str(s):
if s:
s = str(round(s))
if s<1:
s = str(round(s,1))
else:
s = str(round(s))
else:
s = '-'
return s
@ -2197,17 +2201,18 @@ def header_search_draw(self, context):
if preferences.search_in_header:
layout = self.layout
s = bpy.context.scene
wm = bpy.context.window_manager
ui_props = s.blenderkitUI
if ui_props.asset_type == 'MODEL':
props = s.blenderkit_models
props = wm.blenderkit_models
if ui_props.asset_type == 'MATERIAL':
props = s.blenderkit_mat
props = wm.blenderkit_mat
if ui_props.asset_type == 'BRUSH':
props = s.blenderkit_brush
props = wm.blenderkit_brush
if ui_props.asset_type == 'HDR':
props = s.blenderkit_HDR
props = wm.blenderkit_HDR
if ui_props.asset_type == 'SCENE':
props = s.blenderkit_scene
props = wm.blenderkit_scene
# the center snap menu is in edit and object mode if tool settings are off.
if context.space_data.show_region_tool_header == True or context.mode[:4] not in ('EDIT', 'OBJE'):

View File

@ -154,36 +154,37 @@ def get_selected_replace_adepts():
def get_search_props():
scene = bpy.context.scene
wm = bpy.context.window_manager
if scene is None:
return;
uiprops = scene.blenderkitUI
props = None
if uiprops.asset_type == 'MODEL':
if not hasattr(scene, 'blenderkit_models'):
if not hasattr(wm, 'blenderkit_models'):
return;
props = scene.blenderkit_models
props = wm.blenderkit_models
if uiprops.asset_type == 'SCENE':
if not hasattr(scene, 'blenderkit_scene'):
if not hasattr(wm, 'blenderkit_scene'):
return;
props = scene.blenderkit_scene
props = wm.blenderkit_scene
if uiprops.asset_type == 'HDR':
if not hasattr(scene, 'blenderkit_HDR'):
if not hasattr(wm, 'blenderkit_HDR'):
return;
props = scene.blenderkit_HDR
props = wm.blenderkit_HDR
if uiprops.asset_type == 'MATERIAL':
if not hasattr(scene, 'blenderkit_mat'):
if not hasattr(wm, 'blenderkit_mat'):
return;
props = scene.blenderkit_mat
props = wm.blenderkit_mat
if uiprops.asset_type == 'TEXTURE':
if not hasattr(scene, 'blenderkit_tex'):
if not hasattr(wm, 'blenderkit_tex'):
return;
# props = scene.blenderkit_tex
if uiprops.asset_type == 'BRUSH':
if not hasattr(scene, 'blenderkit_brush'):
if not hasattr(wm, 'blenderkit_brush'):
return;
props = scene.blenderkit_brush
props = wm.blenderkit_brush
return props
@ -630,8 +631,8 @@ 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):
s = bpy.context.scene
mat_props = s.blenderkit_mat
wm = bpy.context.window_manager
mat_props = wm.blenderkit_mat
if mat_props.automap:
tob = bpy.data.objects[target_object]
# only automap mesh models
@ -813,7 +814,7 @@ def user_is_owner(asset_data=None):
def asset_from_newer_blender_version(asset_data):
bver = bpy.app.version
aver = asset_data['sourceAppVersion'].split('.')
print(aver,bver)
# print(aver,bver)
bver_f = bver[0] + bver[1] * .01 + bver[2] * .0001
aver_f = int(aver[0]) + int(aver[1]) * .01 + int(aver[2]) * .0001
return aver_f>bver_f