Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'blenderkit/download.py')
-rw-r--r--blenderkit/download.py58
1 files changed, 42 insertions, 16 deletions
diff --git a/blenderkit/download.py b/blenderkit/download.py
index cfda9b7b..bbb09c4c 100644
--- a/blenderkit/download.py
+++ b/blenderkit/download.py
@@ -343,14 +343,16 @@ def append_asset(asset_data, **kwargs): # downloaders=[], location=None,
location=downloader['location'],
rotation=downloader['rotation'],
link=link,
- name=asset_data['name'])
+ name=asset_data['name'],
+ parent=kwargs.get('parent'))
else:
parent, newobs = append_link.append_objects(file_names[-1],
location=downloader['location'],
rotation=downloader['rotation'],
link=link,
- name=asset_data['name'])
+ name=asset_data['name'],
+ parent=kwargs.get('parent'))
if parent.type == 'EMPTY' and link:
bmin = asset_data['bbox_min']
bmax = asset_data['bbox_max']
@@ -363,12 +365,14 @@ def append_asset(asset_data, **kwargs): # downloaders=[], location=None,
location=kwargs['model_location'],
rotation=kwargs['model_rotation'],
link=link,
- name=asset_data['name'])
+ name=asset_data['name'],
+ parent=kwargs.get('parent'))
else:
parent, newobs = append_link.append_objects(file_names[-1],
location=kwargs['model_location'],
rotation=kwargs['model_rotation'],
- link=link)
+ link=link,
+ parent=kwargs.get('parent'))
if parent.type == 'EMPTY' and link:
bmin = asset_data['bbox_min']
bmax = asset_data['bbox_max']
@@ -839,13 +843,16 @@ class BlenderkitDownloadOperator(bpy.types.Operator):
asset_index: IntProperty(name="Asset Index", description='asset index in search results', default=-1)
target_object: StringProperty(
- name="Material Target Object",
- description="",
+ name="Target Object",
+ description="Material or object target for replacement",
default="")
+
material_target_slot: IntProperty(name="Asset Index", description='asset index in search results', default=0)
model_location: FloatVectorProperty(name='Asset Location', default=(0, 0, 0))
model_rotation: FloatVectorProperty(name='Asset Rotation', default=(0, 0, 0))
+ replace: BoolProperty(name='Replace', description='replace selection with the asset', default=False)
+
cast_parent: StringProperty(
name="Particles Target Object",
description="",
@@ -865,19 +872,38 @@ class BlenderkitDownloadOperator(bpy.types.Operator):
s['assets used'] = {}
if asset_data['asset_base_id'] in s.get('assets used'):
asset_data = s['assets used'][asset_data['asset_base_id']].to_dict()
+
atype = asset_data['asset_type']
if bpy.context.mode != 'OBJECT' and (
atype == 'model' or atype == 'material') and bpy.context.active_object is not None:
bpy.ops.object.mode_set(mode='OBJECT')
- kwargs = {
- 'cast_parent': self.cast_parent,
- 'target_object': self.target_object,
- 'material_target_slot': self.material_target_slot,
- 'model_location': tuple(self.model_location),
- 'model_rotation': tuple(self.model_rotation)
- }
-
- start_download(asset_data, **kwargs)
+
+ if self.replace: # cleanup first, assign later.
+ obs = utils.get_selected_models()
+
+ for ob in obs:
+ kwargs = {
+ 'cast_parent': self.cast_parent,
+ 'target_object': ob.name,
+ 'material_target_slot': ob.active_material_index,
+ 'model_location': tuple(ob.matrix_world.translation),
+ 'model_rotation': tuple(ob.matrix_world.to_euler()),
+ 'replace': False,
+ 'parent': ob.parent
+ }
+ utils.delete_hierarchy(ob)
+ start_download(asset_data, **kwargs)
+ else:
+ kwargs = {
+ 'cast_parent': self.cast_parent,
+ 'target_object': self.target_object,
+ 'material_target_slot': self.material_target_slot,
+ 'model_location': tuple(self.model_location),
+ 'model_rotation': tuple(self.model_rotation),
+ 'replace': False
+ }
+
+ start_download(asset_data, **kwargs)
return {'FINISHED'}
@@ -886,7 +912,7 @@ def register_download():
bpy.utils.register_class(BlenderkitKillDownloadOperator)
bpy.app.handlers.load_post.append(scene_load)
bpy.app.handlers.save_pre.append(scene_save)
- bpy.app.timers.register(timer_update, persistent = True)
+ bpy.app.timers.register(timer_update, persistent=True)
def unregister_download():