diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py index 37e91a0ab4ab10b764af78761e73df857e2eacb6..574349b113fc85494ae2bb11751b6ccb1abe97c4 100644 --- a/blenderkit/__init__.py +++ b/blenderkit/__init__.py @@ -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 diff --git a/blenderkit/download.py b/blenderkit/download.py index 4d7cfa5246442e42deb79ab28e55e83c22cd30f8..d0b6cc98c492efc70e66c607203aab47cf37cf1f 100644 --- a/blenderkit/download.py +++ b/blenderkit/download.py @@ -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']: diff --git a/blenderkit/search.py b/blenderkit/search.py index 940375fa935083fc9dd2d38f04208d2966d73254..ed295e796915bdf59f830e2e9c94e4dead7a5fef 100644 --- a/blenderkit/search.py +++ b/blenderkit/search.py @@ -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() diff --git a/blenderkit/ui.py b/blenderkit/ui.py index f402de51c9fdb4eb1cfc336e9d0592baa748fd99..a21cff91fcd4803f399145d822d71b0c159cba22 100644 --- a/blenderkit/ui.py +++ b/blenderkit/ui.py @@ -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: diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py index c763ba9ec3bee136a907e60fe027e867315468ac..de4a5f9bb64ea28d6637628875ba83f2667b7d0b 100644 --- a/blenderkit/ui_panels.py +++ b/blenderkit/ui_panels.py @@ -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'): diff --git a/blenderkit/utils.py b/blenderkit/utils.py index c16bc017a35231581f771e6b426613c125e69280..d5affc7e8842e1851c9e2ae772d54dfa2e27e929 100644 --- a/blenderkit/utils.py +++ b/blenderkit/utils.py @@ -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