def start_thumbnailer(self=None, json_args=None, props=None, wait=False, add_bg_process=True): # Prepare to save the file binary_path = bpy.app.binary_path script_path = os.path.dirname(os.path.realpath(__file__)) ext = '.blend' tfpath = paths.get_thumbnailer_filepath() datafile = os.path.join(json_args['tempdir'], BLENDERKIT_EXPORT_DATA_FILE) try: with open(datafile, 'w', encoding='utf-8') as s: json.dump(json_args, s, ensure_ascii=False, indent=4) proc = subprocess.Popen([ binary_path, "--background", "-noaudio", tfpath, "--python", os.path.join(script_path, "autothumb_model_bg.py"), "--", datafile, ], bufsize=1, stdout=subprocess.PIPE, stdin=subprocess.PIPE, creationflags=utils.get_process_flags()) eval_path_computing = "bpy.data.objects['%s'].blenderkit.is_generating_thumbnail" % json_args['asset_name'] eval_path_state = "bpy.data.objects['%s'].blenderkit.thumbnail_generating_state" % json_args['asset_name'] eval_path = "bpy.data.objects['%s']" % json_args['asset_name'] bg_blender.add_bg_process(name = f"{json_args['asset_name']} thumbnailer" ,eval_path_computing=eval_path_computing, eval_path_state=eval_path_state, eval_path=eval_path, process_type='THUMBNAILER', process=proc) except Exception as e: self.report({'WARNING'}, "Error while exporting file: %s" % str(e)) return {'FINISHED'}
def start_thumbnailer(self, context): # Prepare to save the file mainmodel = utils.get_active_model() mainmodel.blenderkit.is_generating_thumbnail = True mainmodel.blenderkit.thumbnail_generating_state = 'starting blender instance' binary_path = bpy.app.binary_path script_path = os.path.dirname(os.path.realpath(__file__)) basename, ext = os.path.splitext(bpy.data.filepath) if not basename: basename = os.path.join(basename, "temp") if not ext: ext = ".blend" asset_name = mainmodel.name tempdir = tempfile.mkdtemp() file_dir = os.path.dirname(bpy.data.filepath) thumb_path = os.path.join(file_dir, asset_name) rel_thumb_path = os.path.join('//', asset_name) i = 0 while os.path.isfile(thumb_path + '.jpg'): thumb_path = os.path.join(file_dir, asset_name + '_' + str(i).zfill(4)) rel_thumb_path = os.path.join('//', asset_name + '_' + str(i).zfill(4)) i += 1 filepath = os.path.join(tempdir, "thumbnailer_blenderkit" + ext) tfpath = paths.get_thumbnailer_filepath() datafile = os.path.join(tempdir, BLENDERKIT_EXPORT_DATA_FILE) try: # save a copy of actual scene but don't interfere with the users models bpy.ops.wm.save_as_mainfile(filepath=filepath, compress=False, copy=True) obs = utils.get_hierarchy(mainmodel) obnames = [] for ob in obs: obnames.append(ob.name) with open(datafile, 'w') as s: bkit = mainmodel.blenderkit json.dump( { "type": "model", "models": str(obnames), "thumbnail_angle": bkit.thumbnail_angle, "thumbnail_snap_to": bkit.thumbnail_snap_to, "thumbnail_background_lightness": bkit.thumbnail_background_lightness, "thumbnail_resolution": bkit.thumbnail_resolution, "thumbnail_samples": bkit.thumbnail_samples, "thumbnail_denoising": bkit.thumbnail_denoising, }, s) proc = subprocess.Popen([ binary_path, "--background", "-noaudio", tfpath, "--python", os.path.join(script_path, "autothumb_model_bg.py"), "--", datafile, filepath, thumb_path, tempdir ], bufsize=1, stdout=subprocess.PIPE, stdin=subprocess.PIPE, creationflags=utils.get_process_flags()) eval_path_computing = "bpy.data.objects['%s'].blenderkit.is_generating_thumbnail" % mainmodel.name eval_path_state = "bpy.data.objects['%s'].blenderkit.thumbnail_generating_state" % mainmodel.name eval_path = "bpy.data.objects['%s']" % mainmodel.name bg_blender.add_bg_process(eval_path_computing=eval_path_computing, eval_path_state=eval_path_state, eval_path=eval_path, process_type='THUMBNAILER', process=proc) mainmodel.blenderkit.thumbnail = rel_thumb_path + '.jpg' mainmodel.blenderkit.thumbnail_generating_state = 'Saving .blend file' except Exception as e: self.report({'WARNING'}, "Error while exporting file: %s" % str(e)) return {'FINISHED'}
def start_thumbnailer(self, context): # Prepare to save the file mainmodel = utils.get_active_model() mainmodel.blenderkit.is_generating_thumbnail = True mainmodel.blenderkit.thumbnail_generating_state = 'starting blender instance' binary_path = bpy.app.binary_path script_path = os.path.dirname(os.path.realpath(__file__)) basename, ext = os.path.splitext(bpy.data.filepath) if not basename: basename = os.path.join(basename, "temp") if not ext: ext = ".blend" asset_name = mainmodel.blenderkit.name tempdir = tempfile.mkdtemp() file_dir = os.path.dirname(bpy.data.filepath) thumb_path = os.path.join(file_dir, asset_name) rel_thumb_path = os.path.join('//', asset_name) i = 0 while os.path.isfile(thumb_path + '.jpg'): thumb_path = os.path.join(file_dir, asset_name + '_' + str(i).zfill(4)) rel_thumb_path = os.path.join('//', asset_name + '_' + str(i).zfill(4)) i += 1 filepath = os.path.join(tempdir, "thumbnailer_blenderkit" + ext) tfpath = paths.get_thumbnailer_filepath() datafile = os.path.join(tempdir, BLENDERKIT_EXPORT_DATA_FILE) try: # save a copy of actual scene but don't interfere with the users models bpy.ops.wm.save_as_mainfile(filepath=filepath, compress=False, copy=True) obs = utils.get_hierarchy(mainmodel) obnames = [] for ob in obs: obnames.append(ob.name) with open(datafile, 'w') as s: bkit = mainmodel.blenderkit json.dump({ "type": "model", "models": str(obnames), "thumbnail_angle": bkit.thumbnail_angle, "thumbnail_snap_to": bkit.thumbnail_snap_to, "thumbnail_background_lightness": bkit.thumbnail_background_lightness, "thumbnail_samples": bkit.thumbnail_samples, "thumbnail_denoising": bkit.thumbnail_denoising, }, s) flags = BELOW_NORMAL_PRIORITY_CLASS if sys.platform != 'win32': # TODO test this on windows and find out how to change process priority on linux # without psutil - we don't want any more libs in the addon flags = 0 proc = subprocess.Popen([ binary_path, "--background", "-noaudio", tfpath, "--python", os.path.join(script_path, "autothumb_model_bg.py"), "--", datafile, filepath, thumb_path, tempdir ], bufsize=1, stdout=subprocess.PIPE, stdin=subprocess.PIPE, creationflags=flags) eval_path_computing = "bpy.data.objects['%s'].blenderkit.is_generating_thumbnail" % mainmodel.name eval_path_state = "bpy.data.objects['%s'].blenderkit.thumbnail_generating_state" % mainmodel.name eval_path = "bpy.data.objects['%s']" % mainmodel.name bg_blender.add_bg_process(eval_path_computing=eval_path_computing, eval_path_state=eval_path_state, eval_path=eval_path, process_type='THUMBNAILER', process=proc) mainmodel.blenderkit.thumbnail = rel_thumb_path + '.jpg' mainmodel.blenderkit.thumbnail_generating_state = 'Saving .blend file' except Exception as e: self.report({'WARNING'}, "Error while exporting file: %s" % str(e)) return {'FINISHED'}