diff options
-rw-r--r-- | blenderkit/append_link.py | 8 | ||||
-rw-r--r-- | blenderkit/download.py | 20 | ||||
-rw-r--r-- | blenderkit/search.py | 40 | ||||
-rw-r--r-- | blenderkit/ui.py | 5 | ||||
-rw-r--r-- | blenderkit/ui_panels.py | 7 |
5 files changed, 63 insertions, 17 deletions
diff --git a/blenderkit/append_link.py b/blenderkit/append_link.py index b6bfb791..2301daac 100644 --- a/blenderkit/append_link.py +++ b/blenderkit/append_link.py @@ -88,6 +88,8 @@ def append_scene(file_name, scenename=None, link=False, fake_user=False): def link_collection(file_name, obnames=[], location=(0, 0, 0), link=False, parent = None, **kwargs): '''link an instanced group - model type asset''' sel = utils.selection_get() + print('link collection') + print(kwargs) with bpy.data.libraries.load(file_name, link=link, relative=True) as (data_from, data_to): scols = [] @@ -115,6 +117,12 @@ def link_collection(file_name, obnames=[], location=(0, 0, 0), link=False, paren main_object.instance_collection = col break; + #sometimes, the lib might already be without the actual link. + if not main_object.instance_collection and kwargs['name']: + col = bpy.data.collections.get(kwargs['name']) + if col: + main_object.instance_collection = col + main_object.name = main_object.instance_collection.name # bpy.ops.wm.link(directory=file_name + "/Collection/", filename=kwargs['name'], link=link, instance_collections=True, diff --git a/blenderkit/download.py b/blenderkit/download.py index 7ec425ce..c14fc84d 100644 --- a/blenderkit/download.py +++ b/blenderkit/download.py @@ -343,6 +343,13 @@ def append_asset(asset_data, **kwargs): # downloaders=[], location=None, parent=kwargs.get('parent')) else: + # parent, newobs = append_link.link_collection(file_names[-1], + # location=downloader['location'], + # rotation=downloader['rotation'], + # link=False, + # name=asset_data['name'], + # parent=kwargs.get('parent')) + parent, newobs = append_link.append_objects(file_names[-1], location=downloader['location'], rotation=downloader['rotation'], @@ -364,10 +371,17 @@ def append_asset(asset_data, **kwargs): # downloaders=[], location=None, name=asset_data['name'], parent=kwargs.get('parent')) else: + # parent, newobs = append_link.link_collection(file_names[-1], + # location=kwargs['model_location'], + # rotation=kwargs['model_rotation'], + # link=False, + # name=asset_data['name'], + # parent=kwargs.get('parent')) parent, newobs = append_link.append_objects(file_names[-1], location=kwargs['model_location'], rotation=kwargs['model_rotation'], link=link, + name=asset_data['name'], parent=kwargs.get('parent')) if parent.type == 'EMPTY' and link: bmin = asset_data['bbox_min'] @@ -723,8 +737,8 @@ def try_finished_append(asset_data, **kwargs): # location=None, material_target for f in file_names: try: os.remove(f) - except: - e = sys.exc_info()[0] + except Exception as e: + # e = sys.exc_info()[0] print(e) pass; done = False @@ -934,7 +948,7 @@ class BlenderkitDownloadOperator(bpy.types.Operator): if self.replace: # cleanup first, assign later. obs = utils.get_selected_replace_adepts() - print(obs) + # print(obs) for ob in obs: print('replace attempt ', ob.name) if self.asset_base_id != '': diff --git a/blenderkit/search.py b/blenderkit/search.py index 6c8d16e2..82bb8f58 100644 --- a/blenderkit/search.py +++ b/blenderkit/search.py @@ -101,22 +101,40 @@ def refresh_token_timer(): return max(3600, user_preferences.api_key_life - 3600) +def update_ad(ad): + if not ad.get('assetBaseId'): + ad['assetBaseId'] = ad['asset_base_id'] # this should stay ONLY for compatibility with older scenes + ad['assetType'] = ad['asset_type'] # this should stay ONLY for compatibility with older scenes + ad['canDownload'] = ad['can_download'] # this should stay ONLY for compatibility with older scenes + ad['verificationStatus'] = ad['verification_status'] # this should stay ONLY for compatibility with older scenes + ad['author'] = {} + ad['author']['id'] = ad['author_id'] # this should stay ONLY for compatibility with older scenes + return ad def update_assets_data(): # updates assets data on scene load. '''updates some properties that were changed on scenes with older assets. The properties were mainly changed from snake_case to CamelCase to fit the data that is coming from the server. ''' - for ob in bpy.context.scene.objects: - if ob.get('asset_data') != None: - ad = ob['asset_data'] - if not ad.get('assetBaseId'): - ad['assetBaseId'] = ad['asset_base_id'], # this should stay ONLY for compatibility with older scenes - ad['assetType'] = ad['asset_type'], # this should stay ONLY for compatibility with older scenes - ad['canDownload'] = ad['can_download'], # this should stay ONLY for compatibility with older scenes - ad['verificationStatus'] = ad[ - 'verification_status'], # this should stay ONLY for compatibility with older scenes - ad['author'] = {} - ad['author']['id'] = ad['author_id'], # this should stay ONLY for compatibility with older scenes + data = bpy.data + + datablocks = [ + bpy.data.objects, + bpy.data.materials, + bpy.data.brushes, + ] + for dtype in datablocks: + for block in dtype: + if block.get('asset_data') != None: + update_ad(block['asset_data']) + + dicts = [ + 'assets used', + 'assets rated', + ] + for d in dicts: + for k in d.keys(): + update_ad(d[k]) + # bpy.context.scene['assets used'][ad] = ad @persistent diff --git a/blenderkit/ui.py b/blenderkit/ui.py index 7935363d..80b7ef2c 100644 --- a/blenderkit/ui.py +++ b/blenderkit/ui.py @@ -1033,9 +1033,10 @@ def is_rating_possible(): m = ao.active_material if m is not None: ad = m.get('asset_data') - if ad is not None: + if ad is not None and ad.get('assetBaseId'): rated = bpy.context.scene['assets rated'].get(ad['assetBaseId']) - return True, rated, m, ad + if rated: + return True, rated, m, ad # if t>2 and t<2.5: # ui_props.rating_on = False diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py index 89646862..a591e76e 100644 --- a/blenderkit/ui_panels.py +++ b/blenderkit/ui_panels.py @@ -1048,7 +1048,12 @@ def draw_asset_context_menu(self, context, asset_data): op.author_id = author_id op = layout.operator('view3d.blenderkit_search', text='Search Similar') - op.keywords = asset_data['name'] + ' ' + asset_data['description'] + ' ' + ' '.join(asset_data['tags']) + #build search string from description and tags: + op.keywords = asset_data['name'] + if asset_data.get('description'): + op.keywords += ' ' + asset_data.get('description') + op.keywords += ' '.join(asset_data.get('tags')) + if asset_data.get('canDownload') != 0: if len(bpy.context.selected_objects) > 0 and ui_props.asset_type == 'MODEL': aob = bpy.context.active_object |