Source code for meshparty.meshlabserver

import os
import subprocess
import glob
import numpy as np

from multiwrapper import multiprocessing_utils as mu

HOME = os.path.expanduser("~")

# path_to_scripts = os.path.dirname(__file__) + "/meshlabserver_scripts/"
path_to_scripts = HOME + "/PyChunkedGraph/pychunkedgraph/meshing/meshlabserver_scripts/"


[docs]def run_meshlab_script(script_name, arg_dict): """ Runs meshlabserver script --headless No X-Server required :param script_name: str :param arg_dict: dict [str: str] """ arg_string = "".join(["-{0} {1} ".format(k, arg_dict[k]) for k in arg_dict.keys()]) command = "xvfb-run --auto-servernum --server-num=1 meshlabserver -s {0}/{1} {2}".\ format(path_to_scripts, script_name, arg_string) p = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE) p.wait()
def _run_meshlab_script_on_dir_thread(args): script_name, path_block, out_dir, suffix, arg_dict = args for path in path_block: out_path = "{}/{}{}.obj".format(out_dir, "".join(os.path.basename(path).split(".")[:-1]), suffix) this_arg_dict = {"i": path, "o": out_path} this_arg_dict.update(arg_dict) run_meshlab_script(script_name, this_arg_dict)
[docs]def run_meshlab_script_on_dir(script_name, in_dir, out_dir, suffix, arg_dict={}, n_threads=1): paths = glob.glob(in_dir + "/*.obj") print(len(paths)) if len(suffix) > 0: suffix = "_{}".format(suffix) n_jobs = n_threads * 3 if len(paths) < n_jobs: n_jobs = len(paths) path_blocks = np.array_split(paths, n_jobs) multi_args = [] for path_block in path_blocks: multi_args.append([script_name, path_block, out_dir, suffix, arg_dict]) if n_threads == 1: mu.multiprocess_func(_run_meshlab_script_on_dir_thread, multi_args, debug=True, verbose=True, n_threads=1) else: mu.multisubprocess_func(_run_meshlab_script_on_dir_thread, multi_args, n_threads=n_threads)