4 def __init__(self, context):
11 self.window_manager = context.window_manager
12 self.window_manager.progress_begin(0.0, 1.0)
14 self.window_manager = None
16 def push_task(self, task, low, high):
17 self.stack.append((self.task, self.start, self.delta))
18 self.set_task(task, low, high)
20 def push_task_slice(self, task, index, count):
21 self.push_task(task, index/count, (index+1)/count)
27 self.set_progress(1.0)
28 self.task, self.start, self.delta = self.stack.pop()
30 def set_task(self, task, low, high):
32 outer = self.stack[-1]
34 task = "{}: {}".format(outer[0], task)
35 low = outer[1]+low*outer[2]
36 high = outer[1]+high*outer[2]
42 self.set_progress(0.0)
44 def set_task_slice(self, task, index, count):
45 self.set_task(task, index/count, (index+1)/count)
47 def set_progress(self, value):
48 value = self.start+self.delta*value
49 if value>self.last+0.001:
50 if self.window_manager:
51 self.window_manager.progress_update(value)
55 def linear_to_srgb(l):
59 return 1.055*(l**(1/2.4))-0.055
61 def get_colormap(srgb):
68 if path.startswith("//"):
70 return os.path.basename(path)
72 def make_unique(values):
81 def get_linked_node_and_socket(node_tree, socket):
82 for l in node_tree.links:
83 if socket==l.to_socket:
84 return (l.from_node, l.from_socket)
85 elif socket==l.from_socket:
86 return (l.to_node, l.to_socket)
89 def compute_bounding_sphere(points):
90 p1 = max(((p, p.length) for p in points), key=lambda x:x[1])[0]
91 p2 = max(((p, (p-p1).length) for p in points), key=lambda x:x[1])[0]
93 radius = (p1-p2).length/2
97 center += d*(1-radius/d.length)/2
98 radius = (radius+d.length)/2
100 return center, radius