X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=blender%2Fio_mspgl%2Futil.py;h=3b2f718bdb4aebf4399870ad6227b4554e78c347;hb=7ae4af705535271ad84dbfe2b5a24bc9c546ae01;hp=850f1ddbb71dd754005d80a1e568fb01dc9f9819;hpb=328ac951d8df830e1c9ee469b4ab073e9163606d;p=libs%2Fgl.git diff --git a/blender/io_mspgl/util.py b/blender/io_mspgl/util.py index 850f1ddb..3b2f718b 100644 --- a/blender/io_mspgl/util.py +++ b/blender/io_mspgl/util.py @@ -1,3 +1,5 @@ +import os + class Progress: def __init__(self, context): self.task = "" @@ -5,31 +7,73 @@ class Progress: self.delta = 1.0 self.last = 0.0 self.stack = [] - self.window_manager = context.window_manager - self.window_manager.progress_begin(0.0, 1.0) + if context: + self.window_manager = context.window_manager + self.window_manager.progress_begin(0.0, 1.0) + else: + self.window_manager = None def push_task(self, task, low, high): - self.stack.append((task, low, high-low)) - self.set_task("init", 0.0, 0.0) + self.stack.append((self.task, self.start, self.delta)) + self.set_task(task, low, high) + + def push_task_slice(self, task, index, count): + self.push_task(task, index/count, (index+1)/count) def pop_task(self): - self.set_task("finish", 1.0, 1.0) - self.stack.pop() + if not self.stack: + return + + self.set_progress(1.0) + self.task, self.start, self.delta = self.stack.pop() def set_task(self, task, low, high): if self.stack: - task = self.stack[-1][0]+": "+task - low = self.stack[-1][1]+self.stack[-1][2]*low - high = self.stack[-1][1]+self.stack[-1][2]*high + outer = self.stack[-1] + if outer[0]: + task = "{}: {}".format(outer[0], task) + low = outer[1]+low*outer[2] + high = outer[1]+high*outer[2] self.task = task self.start = low self.delta = high-low - self.set_progress(0) + self.set_progress(0.0) + + def set_task_slice(self, task, index, count): + self.set_task(task, index/count, (index+1)/count) def set_progress(self, value): value = self.start+self.delta*value - if value>self.last+0.01: - self.window_manager.progress_update(value) + if value>self.last+0.001: + if self.window_manager: + self.window_manager.progress_update(value) self.last = value + + +def linear_to_srgb(l): + if l<0.0031308: + return 12.92*l + else: + return 1.055*(l**(1/2.4))-0.055 + +def get_colormap(srgb): + if srgb: + return linear_to_srgb + else: + return lambda x: x + +def basename(path): + if path.startswith("//"): + path = path[2:] + return os.path.basename(path) + +def make_unique(values): + seen = set() + result = [] + for i in values: + if i not in seen: + result.append(i) + seen.add(i) + return result