def get_upload_data(caller=None, context=None, asset_type=None): ''' works though metadata from addom props and prepares it for upload to dicts. Parameters ---------- caller - upload operator or none context - context asset_type - asset type in capitals (blender enum) Returns ------- export_ddta- all extra data that the process needs to upload and communicate with UI from a thread. - eval_path_computing - string path to UI prop that denots if upload is still running - eval_path_state - string path to UI prop that delivers messages about upload to ui - eval_path - path to object holding upload data to be able to access it with various further commands - models - in case of model upload, list of objects - thumbnail_path - path to thumbnail file upload_data - asset_data generated from the ui properties ''' user_preferences = bpy.context.preferences.addons['blenderkit'].preferences api_key = user_preferences.api_key export_data = { # "type": asset_type, } upload_params = {} if asset_type == 'MODEL': # Prepare to save the file mainmodel = utils.get_active_model() props = mainmodel.blenderkit obs = utils.get_hierarchy(mainmodel) obnames = [] for ob in obs: obnames.append(ob.name) export_data["models"] = obnames export_data["thumbnail_path"] = bpy.path.abspath(props.thumbnail) eval_path_computing = "bpy.data.objects['%s'].blenderkit.uploading" % mainmodel.name eval_path_state = "bpy.data.objects['%s'].blenderkit.upload_state" % mainmodel.name eval_path = "bpy.data.objects['%s']" % mainmodel.name engines = [props.engine.lower()] if props.engine1 != 'NONE': engines.append(props.engine1.lower()) if props.engine2 != 'NONE': engines.append(props.engine2.lower()) if props.engine3 != 'NONE': engines.append(props.engine3.lower()) if props.engine == 'OTHER': engines.append(props.engine_other.lower()) style = props.style.lower() # if style == 'OTHER': # style = props.style_other.lower() pl_dict = {'FINISHED': 'finished', 'TEMPLATE': 'template'} upload_data = { "assetType": 'model', } upload_params = { "productionLevel": props.production_level.lower(), "model_style": style, "engines": engines, "modifiers": comma2array(props.modifiers), "materials": comma2array(props.materials), "shaders": comma2array(props.shaders), "uv": props.uv, "dimensionX": round(props.dimensions[0], 4), "dimensionY": round(props.dimensions[1], 4), "dimensionZ": round(props.dimensions[2], 4), "boundBoxMinX": round(props.bbox_min[0], 4), "boundBoxMinY": round(props.bbox_min[1], 4), "boundBoxMinZ": round(props.bbox_min[2], 4), "boundBoxMaxX": round(props.bbox_max[0], 4), "boundBoxMaxY": round(props.bbox_max[1], 4), "boundBoxMaxZ": round(props.bbox_max[2], 4), "animated": props.animated, "rig": props.rig, "simulation": props.simulation, "purePbr": props.pbr, "faceCount": props.face_count, "faceCountRender": props.face_count_render, "manifold": props.manifold, "objectCount": props.object_count, "procedural": props.is_procedural, "nodeCount": props.node_count, "textureCount": props.texture_count, "megapixels": round(props.total_megapixels / 1000000), # "scene": props.is_scene, } if props.use_design_year: upload_params["designYear"] = props.design_year if props.condition != 'UNSPECIFIED': upload_params["condition"] = props.condition.lower() if props.pbr: pt = props.pbr_type pt = pt.lower() upload_params["pbrType"] = pt if props.texture_resolution_max > 0: upload_params["textureResolutionMax"] = props.texture_resolution_max upload_params["textureResolutionMin"] = props.texture_resolution_min if props.mesh_poly_type != 'OTHER': upload_params["meshPolyType"] = props.mesh_poly_type.lower() # .replace('_',' ') optional_params = ['manufacturer', 'designer', 'design_collection', 'design_variant'] for p in optional_params: if eval('props.%s' % p) != '': upload_params[sub_to_camel(p)] = eval('props.%s' % p) if asset_type == 'SCENE': # Prepare to save the file s = bpy.context.scene props = s.blenderkit export_data["scene"] = s.name export_data["thumbnail_path"] = bpy.path.abspath(props.thumbnail) eval_path_computing = "bpy.data.scenes['%s'].blenderkit.uploading" % s.name eval_path_state = "bpy.data.scenes['%s'].blenderkit.upload_state" % s.name eval_path = "bpy.data.scenes['%s']" % s.name engines = [props.engine.lower()] if props.engine1 != 'NONE': engines.append(props.engine1.lower()) if props.engine2 != 'NONE': engines.append(props.engine2.lower()) if props.engine3 != 'NONE': engines.append(props.engine3.lower()) if props.engine == 'OTHER': engines.append(props.engine_other.lower()) style = props.style.lower() # if style == 'OTHER': # style = props.style_other.lower() pl_dict = {'FINISHED': 'finished', 'TEMPLATE': 'template'} upload_data = { "assetType": 'scene', } upload_params = { "productionLevel": props.production_level.lower(), "model_style": style, "engines": engines, "modifiers": comma2array(props.modifiers), "materials": comma2array(props.materials), "shaders": comma2array(props.shaders), "uv": props.uv, "animated": props.animated, # "simulation": props.simulation, "purePbr": props.pbr, "faceCount": 1, # props.face_count, "faceCountRender": 1, # props.face_count_render, "objectCount": 1, # props.object_count, # "scene": props.is_scene, } if props.use_design_year: upload_params["designYear"] = props.design_year if props.condition != 'UNSPECIFIED': upload_params["condition"] = props.condition.lower() if props.pbr: pt = props.pbr_type pt = pt.lower() upload_params["pbrType"] = pt if props.texture_resolution_max > 0: upload_params["textureResolutionMax"] = props.texture_resolution_max upload_params["textureResolutionMin"] = props.texture_resolution_min if props.mesh_poly_type != 'OTHER': upload_params["meshPolyType"] = props.mesh_poly_type.lower() # .replace('_',' ') elif asset_type == 'MATERIAL': mat = bpy.context.active_object.active_material props = mat.blenderkit # props.name = mat.name export_data["material"] = str(mat.name) export_data["thumbnail_path"] = bpy.path.abspath(props.thumbnail) # mat analytics happen here, since they don't take up any time... asset_inspector.check_material(props, mat) eval_path_computing = "bpy.data.materials['%s'].blenderkit.uploading" % mat.name eval_path_state = "bpy.data.materials['%s'].blenderkit.upload_state" % mat.name eval_path = "bpy.data.materials['%s']" % mat.name engine = props.engine if engine == 'OTHER': engine = props.engine_other engine = engine.lower() style = props.style.lower() # if style == 'OTHER': # style = props.style_other.lower() upload_data = { "assetType": 'material', } upload_params = { "material_style": style, "engine": engine, "shaders": comma2array(props.shaders), "uv": props.uv, "animated": props.animated, "purePbr": props.pbr, "textureSizeMeters": props.texture_size_meters, "procedural": props.is_procedural, "nodeCount": props.node_count, "textureCount": props.texture_count, "megapixels": round(props.total_megapixels / 1000000), } if props.pbr: upload_params["pbrType"] = props.pbr_type.lower() if props.texture_resolution_max > 0: upload_params["textureResolutionMax"] = props.texture_resolution_max upload_params["textureResolutionMin"] = props.texture_resolution_min elif asset_type == 'BRUSH': brush = utils.get_active_brush() props = brush.blenderkit # props.name = brush.name export_data["brush"] = str(brush.name) export_data["thumbnail_path"] = bpy.path.abspath(brush.icon_filepath) eval_path_computing = "bpy.data.brushes['%s'].blenderkit.uploading" % brush.name eval_path_state = "bpy.data.brushes['%s'].blenderkit.upload_state" % brush.name eval_path = "bpy.data.brushes['%s']" % brush.name # mat analytics happen here, since they don't take up any time... brush_type = '' if bpy.context.sculpt_object is not None: brush_type = 'sculpt' elif bpy.context.image_paint_object: # could be just else, but for future p brush_type = 'texture_paint' upload_params = { "mode": brush_type, } upload_data = { "assetType": 'brush', } elif asset_type == 'HDR': ui_props = bpy.context.scene.blenderkitUI # imagename = ui_props.hdr_upload_image image = ui_props.hdr_upload_image # bpy.data.images.get(imagename) if not image: return None, None props = image.blenderkit # props.name = brush.name base, ext = os.path.splitext(image.filepath) thumb_path = base + '.jpg' export_data["thumbnail_path"] = bpy.path.abspath(thumb_path) export_data["hdr"] = str(image.name) export_data["hdr_filepath"] = str(bpy.path.abspath(image.filepath)) # export_data["thumbnail_path"] = bpy.path.abspath(brush.icon_filepath) eval_path_computing = "bpy.data.images['%s'].blenderkit.uploading" % image.name eval_path_state = "bpy.data.images['%s'].blenderkit.upload_state" % image.name eval_path = "bpy.data.images['%s']" % image.name # mat analytics happen here, since they don't take up any time... upload_params = { "textureResolutionMax": props.texture_resolution_max } upload_data = { "assetType": 'hdr', } elif asset_type == 'TEXTURE': style = props.style # if style == 'OTHER': # style = props.style_other upload_data = { "assetType": 'texture', } upload_params = { "style": style, "animated": props.animated, "purePbr": props.pbr, "resolution": props.resolution, } if props.pbr: pt = props.pbr_type pt = pt.lower() upload_data["pbrType"] = pt add_version(upload_data) # caller can be upload operator, but also asset bar called from tooltip generator if caller and caller.main_file == True: upload_data["name"] = props.name upload_data["displayName"] = props.name else: upload_data["displayName"] = props.name upload_data["description"] = props.description upload_data["tags"] = comma2array(props.tags) # category is always only one value by a slug, that's why we go down to the lowest level and overwrite. if props.category == '': upload_data["category"] = asset_type.lower() else: upload_data["category"] = props.category if props.subcategory != 'NONE': upload_data["category"] = props.subcategory if props.subcategory1 != 'NONE': upload_data["category"] = props.subcategory1 upload_data["license"] = props.license upload_data["isFree"] = props.is_free upload_data["isPrivate"] = props.is_private == 'PRIVATE' upload_data["token"] = user_preferences.api_key upload_data['parameters'] = upload_params # if props.asset_base_id != '': export_data['assetBaseId'] = props.asset_base_id export_data['id'] = props.id export_data['eval_path_computing'] = eval_path_computing export_data['eval_path_state'] = eval_path_state export_data['eval_path'] = eval_path return export_data, upload_data
def get_upload_data(self, context, asset_type): user_preferences = bpy.context.preferences.addons['blenderkit'].preferences api_key = user_preferences.api_key export_data = { "type": asset_type, } upload_params = {} if asset_type == 'MODEL': # Prepare to save the file mainmodel = utils.get_active_model() props = mainmodel.blenderkit obs = utils.get_hierarchy(mainmodel) obnames = [] for ob in obs: obnames.append(ob.name) export_data["models"] = obnames export_data["thumbnail_path"] = bpy.path.abspath(props.thumbnail) eval_path_computing = "bpy.data.objects['%s'].blenderkit.uploading" % mainmodel.name eval_path_state = "bpy.data.objects['%s'].blenderkit.upload_state" % mainmodel.name eval_path = "bpy.data.objects['%s']" % mainmodel.name engines = [props.engine.lower()] if props.engine1 != 'NONE': engines.append(props.engine1.lower()) if props.engine2 != 'NONE': engines.append(props.engine2.lower()) if props.engine3 != 'NONE': engines.append(props.engine3.lower()) if props.engine == 'OTHER': engines.append(props.engine_other.lower()) style = props.style.lower() if style == 'OTHER': style = props.style_other.lower() pl_dict = {'FINISHED': 'finished', 'TEMPLATE': 'template'} upload_data = { "assetType": 'model', } upload_params = { "productionLevel": props.production_level.lower(), "model_style": style, "engines": engines, "modifiers": comma2array(props.modifiers), "materials": comma2array(props.materials), "shaders": comma2array(props.shaders), "uv": props.uv, "dimensionX": round(props.dimensions[0], 4), "dimensionY": round(props.dimensions[1], 4), "dimensionZ": round(props.dimensions[2], 4), "boundBoxMinX": round(props.bbox_min[0], 4), "boundBoxMinY": round(props.bbox_min[1], 4), "boundBoxMinZ": round(props.bbox_min[2], 4), "boundBoxMaxX": round(props.bbox_max[0], 4), "boundBoxMaxY": round(props.bbox_max[1], 4), "boundBoxMaxZ": round(props.bbox_max[2], 4), "animated": props.animated, "rig": props.rig, "simulation": props.simulation, "purePbr": props.pbr, "faceCount": props.face_count, "faceCountRender": props.face_count_render, "manifold": props.manifold, "objectCount": props.object_count, # "scene": props.is_scene, } if props.use_design_year: upload_params["designYear"] = props.design_year if props.condition != 'UNSPECIFIED': upload_params["condition"] = props.condition.lower() if props.pbr: pt = props.pbr_type pt = pt.lower() upload_params["pbrType"] = pt if props.texture_resolution_max > 0: upload_params["textureResolutionMax"] = props.texture_resolution_max upload_params["textureResolutionMin"] = props.texture_resolution_min if props.mesh_poly_type != 'OTHER': upload_params["meshPolyType"] = props.mesh_poly_type.lower() # .replace('_',' ') optional_params = ['manufacturer', 'designer', 'design_collection', 'design_variant'] for p in optional_params: if eval('props.%s' % p) != '': upload_params[sub_to_camel(p)] = eval('props.%s' % p) if asset_type == 'SCENE': # Prepare to save the file s = bpy.context.scene props = s.blenderkit export_data["scene"] = s.name export_data["thumbnail_path"] = bpy.path.abspath(props.thumbnail) eval_path_computing = "bpy.data.scenes['%s'].blenderkit.uploading" % s.name eval_path_state = "bpy.data.scenes['%s'].blenderkit.upload_state" % s.name eval_path = "bpy.data.scenes['%s']" % s.name engines = [props.engine.lower()] if props.engine1 != 'NONE': engines.append(props.engine1.lower()) if props.engine2 != 'NONE': engines.append(props.engine2.lower()) if props.engine3 != 'NONE': engines.append(props.engine3.lower()) if props.engine == 'OTHER': engines.append(props.engine_other.lower()) style = props.style.lower() if style == 'OTHER': style = props.style_other.lower() pl_dict = {'FINISHED': 'finished', 'TEMPLATE': 'template'} upload_data = { "assetType": 'scene', } upload_params = { "productionLevel": props.production_level.lower(), "model_style": style, "engines": engines, "modifiers": comma2array(props.modifiers), "materials": comma2array(props.materials), "shaders": comma2array(props.shaders), "uv": props.uv, "animated": props.animated, # "simulation": props.simulation, "purePbr": props.pbr, "faceCount": 1, # props.face_count, "faceCountRender": 1, # props.face_count_render, "objectCount": 1, # props.object_count, # "scene": props.is_scene, } if props.use_design_year: upload_params["designYear"] = props.design_year if props.condition != 'UNSPECIFIED': upload_params["condition"] = props.condition.lower() if props.pbr: pt = props.pbr_type pt = pt.lower() upload_params["pbrType"] = pt if props.texture_resolution_max > 0: upload_params["textureResolutionMax"] = props.texture_resolution_max upload_params["textureResolutionMin"] = props.texture_resolution_min if props.mesh_poly_type != 'OTHER': upload_params["meshPolyType"] = props.mesh_poly_type.lower() # .replace('_',' ') elif asset_type == 'MATERIAL': mat = bpy.context.active_object.active_material props = mat.blenderkit # props.name = mat.name export_data["material"] = str(mat.name) export_data["thumbnail_path"] = bpy.path.abspath(props.thumbnail) # mat analytics happen here, since they don't take up any time... asset_inspector.check_material(props, mat) eval_path_computing = "bpy.data.materials['%s'].blenderkit.uploading" % mat.name eval_path_state = "bpy.data.materials['%s'].blenderkit.upload_state" % mat.name eval_path = "bpy.data.materials['%s']" % mat.name engine = props.engine if engine == 'OTHER': engine = props.engine_other engine = engine.lower() style = props.style.lower() if style == 'OTHER': style = props.style_other.lower() upload_data = { "assetType": 'material', } upload_params = { "material_style": style, "engine": engine, "shaders": comma2array(props.shaders), "uv": props.uv, "animated": props.animated, "purePbr": props.pbr, "textureSizeMeters": props.texture_size_meters, } if props.pbr: upload_params["pbrType"] = props.pbr_type.lower() if props.texture_resolution_max > 0: upload_params["textureResolutionMax"] = props.texture_resolution_max upload_params["textureResolutionMin"] = props.texture_resolution_min elif asset_type == 'BRUSH': brush = utils.get_active_brush() props = brush.blenderkit # props.name = brush.name export_data["brush"] = str(brush.name) export_data["thumbnail_path"] = bpy.path.abspath(brush.icon_filepath) eval_path_computing = "bpy.data.brushes['%s'].blenderkit.uploading" % brush.name eval_path_state = "bpy.data.brushes['%s'].blenderkit.upload_state" % brush.name eval_path = "bpy.data.brushes['%s']" % brush.name # mat analytics happen here, since they don't take up any time... brush_type = '' if bpy.context.sculpt_object is not None: brush_type = 'sculpt' elif bpy.context.image_paint_object: # could be just else, but for future p brush_type = 'texture_paint' upload_params = { "mode": brush_type, } upload_data = { "assetType": 'brush', } elif asset_type == 'TEXTURE': style = props.style if style == 'OTHER': style = props.style_other upload_data = { "assetType": 'texture', } upload_params = { "style": style, "animated": props.animated, "purePbr": props.pbr, "resolution": props.resolution, } if props.pbr: pt = props.pbr_type pt = pt.lower() upload_data["pbrType"] = pt add_version(upload_data) upload_data["name"] = props.name upload_data["description"] = props.description upload_data["tags"] = comma2array(props.tags) if props.category == '': upload_data["category"] = asset_type.lower() else: upload_data["category"] = props.category if props.subcategory != '': upload_data["category"] = props.subcategory upload_data["license"] = props.license upload_data["isFree"] = props.is_free upload_data["isPrivate"] = props.is_private == 'PRIVATE' upload_data["token"] = user_preferences.api_key if props.asset_base_id != '': upload_data['assetBaseId'] = props.asset_base_id upload_data['id'] = props.id upload_data['parameters'] = upload_params return export_data, upload_data, eval_path_computing, eval_path_state, eval_path, props
def get_upload_data(self, context, asset_type): user_preferences = bpy.context.preferences.addons['blenderkit'].preferences api_key = user_preferences.api_key export_data = { "type": asset_type, } upload_params = {} if asset_type == 'MODEL': # Prepare to save the file mainmodel = utils.get_active_model() props = mainmodel.blenderkit obs = utils.get_hierarchy(mainmodel) obnames = [] for ob in obs: obnames.append(ob.name) export_data["models"] = obnames export_data["thumbnail_path"] = bpy.path.abspath(props.thumbnail) eval_path_computing = "bpy.data.objects['%s'].blenderkit.uploading" % mainmodel.name eval_path_state = "bpy.data.objects['%s'].blenderkit.upload_state" % mainmodel.name eval_path = "bpy.data.objects['%s']" % mainmodel.name engines = [props.engine.lower()] if props.engine1 != 'NONE': engines.append(props.engine1.lower()) if props.engine2 != 'NONE': engines.append(props.engine2.lower()) if props.engine3 != 'NONE': engines.append(props.engine3.lower()) if props.engine == 'OTHER': engines.append(props.engine_other.lower()) style = props.style.lower() if style == 'OTHER': style = props.style_other.lower() pl_dict = {'FINISHED': 'finished', 'TEMPLATE': 'template'} upload_data = { "assetType": 'model', } upload_params = { "productionLevel": props.production_level.lower(), "model_style": style, "engines": engines, "modifiers": comma2array(props.modifiers), "materials": comma2array(props.materials), "shaders": comma2array(props.shaders), "uv": props.uv, "dimensionX": round(props.dimensions[0], 4), "dimensionY": round(props.dimensions[1], 4), "dimensionZ": round(props.dimensions[2], 4), "boundBoxMinX": round(props.bbox_min[0], 4), "boundBoxMinY": round(props.bbox_min[1], 4), "boundBoxMinZ": round(props.bbox_min[2], 4), "boundBoxMaxX": round(props.bbox_max[0], 4), "boundBoxMaxY": round(props.bbox_max[1], 4), "boundBoxMaxZ": round(props.bbox_max[2], 4), "animated": props.animated, "rig": props.rig, "simulation": props.simulation, "purePbr": props.pbr, "faceCount": props.face_count, "faceCountRender": props.face_count_render, "manifold": props.manifold, "objectCount": props.object_count, # "scene": props.is_scene, } if props.use_design_year: upload_params["designYear"] = props.design_year if props.condition != 'UNSPECIFIED': upload_params["condition"] = props.condition.lower() if props.pbr: pt = props.pbr_type pt = pt.lower() upload_params["pbrType"] = pt if props.texture_resolution_max > 0: upload_params["textureResolutionMax"] = props.texture_resolution_max upload_params["textureResolutionMin"] = props.texture_resolution_min if props.mesh_poly_type != 'OTHER': upload_params["meshPolyType"] = props.mesh_poly_type.lower() # .replace('_',' ') optional_params = ['manufacturer', 'designer', 'design_collection', 'design_variant'] for p in optional_params: if eval('props.%s' % p) != '': upload_params[sub_to_camel(p)] = eval('props.%s' % p) if asset_type == 'SCENE': # Prepare to save the file s = bpy.context.scene props = s.blenderkit export_data["scene"] = s.name export_data["thumbnail_path"] = bpy.path.abspath(props.thumbnail) eval_path_computing = "bpy.data.scenes['%s'].blenderkit.uploading" % s.name eval_path_state = "bpy.data.scenes['%s'].blenderkit.upload_state" % s.name eval_path = "bpy.data.scenes['%s']" % s.name engines = [props.engine.lower()] if props.engine1 != 'NONE': engines.append(props.engine1.lower()) if props.engine2 != 'NONE': engines.append(props.engine2.lower()) if props.engine3 != 'NONE': engines.append(props.engine3.lower()) if props.engine == 'OTHER': engines.append(props.engine_other.lower()) style = props.style.lower() if style == 'OTHER': style = props.style_other.lower() pl_dict = {'FINISHED': 'finished', 'TEMPLATE': 'template'} upload_data = { "assetType": 'scene', } upload_params = { "productionLevel": props.production_level.lower(), "model_style": style, "engines": engines, "modifiers": comma2array(props.modifiers), "materials": comma2array(props.materials), "shaders": comma2array(props.shaders), "uv": props.uv, "animated": props.animated, # "simulation": props.simulation, "purePbr": props.pbr, "faceCount": 1, # props.face_count, "faceCountRender": 1, # props.face_count_render, "objectCount": 1, # props.object_count, # "scene": props.is_scene, } if props.use_design_year: upload_params["designYear"] = props.design_year if props.condition != 'UNSPECIFIED': upload_params["condition"] = props.condition.lower() if props.pbr: pt = props.pbr_type pt = pt.lower() upload_params["pbrType"] = pt if props.texture_resolution_max > 0: upload_params["textureResolutionMax"] = props.texture_resolution_max upload_params["textureResolutionMin"] = props.texture_resolution_min if props.mesh_poly_type != 'OTHER': upload_params["meshPolyType"] = props.mesh_poly_type.lower() # .replace('_',' ') elif asset_type == 'MATERIAL': mat = bpy.context.active_object.active_material props = mat.blenderkit # props.name = mat.name export_data["material"] = str(mat.name) export_data["thumbnail_path"] = bpy.path.abspath(props.thumbnail) # mat analytics happen here, since they don't take up any time... asset_inspector.check_material(props, mat) eval_path_computing = "bpy.data.materials['%s'].blenderkit.uploading" % mat.name eval_path_state = "bpy.data.materials['%s'].blenderkit.upload_state" % mat.name eval_path = "bpy.data.materials['%s']" % mat.name engine = props.engine if engine == 'OTHER': engine = props.engine_other engine = engine.lower() style = props.style.lower() if style == 'OTHER': style = props.style_other.lower() upload_data = { "assetType": 'material', } upload_params = { "material_style": style, "engine": engine, "shaders": comma2array(props.shaders), "uv": props.uv, "animated": props.animated, "purePbr": props.pbr, "textureSizeMeters": props.texture_size_meters, } if props.pbr: upload_params["pbrType"] = props.pbr_type.lower() if props.texture_resolution_max > 0: upload_params["textureResolutionMax"] = props.texture_resolution_max upload_params["textureResolutionMin"] = props.texture_resolution_min elif asset_type == 'BRUSH': brush = utils.get_active_brush() props = brush.blenderkit # props.name = brush.name export_data["brush"] = str(brush.name) export_data["thumbnail_path"] = bpy.path.abspath(brush.icon_filepath) eval_path_computing = "bpy.data.brushes['%s'].blenderkit.uploading" % brush.name eval_path_state = "bpy.data.brushes['%s'].blenderkit.upload_state" % brush.name eval_path = "bpy.data.brushes['%s']" % brush.name # mat analytics happen here, since they don't take up any time... brush_type = '' if bpy.context.sculpt_object is not None: brush_type = 'sculpt' elif bpy.context.image_paint_object: # could be just else, but for future p brush_type = 'texture_paint' upload_params = { "mode": brush_type, } upload_data = { "assetType": 'brush', } elif asset_type == 'TEXTURE': style = props.style if style == 'OTHER': style = props.style_other upload_data = { "assetType": 'texture', } upload_params = { "style": style, "animated": props.animated, "purePbr": props.pbr, "resolution": props.resolution, } if props.pbr: pt = props.pbr_type pt = pt.lower() upload_data["pbrType"] = pt add_version(upload_data) upload_data["name"] = props.name upload_data["description"] = props.description upload_data["tags"] = comma2array(props.tags) if props.category == '': upload_data["category"] = asset_type.lower() else: upload_data["category"] = props.category if props.subcategory != '': upload_data["category"] = props.subcategory upload_data["license"] = props.license upload_data["isFree"] = props.is_free upload_data["token"] = user_preferences.api_key if props.asset_base_id != '': upload_data['assetBaseId'] = props.asset_base_id upload_data['id'] = props.id upload_data['parameters'] = upload_params return export_data, upload_data, eval_path_computing, eval_path_state, eval_path, props