X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=blender%2Fio_mspgl%2Futil.py;h=6e8ec7746bde7c41b5c4791dfca602d7dd65503b;hb=HEAD;hp=850f1ddbb71dd754005d80a1e568fb01dc9f9819;hpb=328ac951d8df830e1c9ee469b4ab073e9163606d;p=libs%2Fgl.git diff --git a/blender/io_mspgl/util.py b/blender/io_mspgl/util.py index 850f1ddb..bfabfa35 100644 --- a/blender/io_mspgl/util.py +++ b/blender/io_mspgl/util.py @@ -1,35 +1,41 @@ -class Progress: - def __init__(self, context): - self.task = "" - self.start = 0.0 - 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) +def linear_to_srgb(l): + if l<0.0031308: + return 12.92*l + else: + return 1.055*(l**(1/2.4))-0.055 - def push_task(self, task, low, high): - self.stack.append((task, low, high-low)) - self.set_task("init", 0.0, 0.0) +def get_colormap(srgb): + if srgb: + return linear_to_srgb + else: + return lambda x: x - def pop_task(self): - self.set_task("finish", 1.0, 1.0) - self.stack.pop() +def make_unique(values): + seen = set() + result = [] + for i in values: + if i not in seen: + result.append(i) + seen.add(i) + return result - 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 +def get_linked_node_and_socket(node_tree, socket): + for l in node_tree.links: + if socket==l.to_socket: + return (l.from_node, l.from_socket) + elif socket==l.from_socket: + return (l.to_node, l.to_socket) + return (None, None) - self.task = task - self.start = low - self.delta = high-low +def compute_bounding_sphere(points): + p1 = max(((p, p.length) for p in points), key=lambda x:x[1])[0] + p2 = max(((p, (p-p1).length) for p in points), key=lambda x:x[1])[0] + center = (p1+p2)/2 + radius = (p1-p2).length/2 + for p in points: + d = p-center + if d.length>radius: + center += d*(1-radius/d.length)/2 + radius = (radius+d.length)/2 - self.set_progress(0) - - def set_progress(self, value): - value = self.start+self.delta*value - if value>self.last+0.01: - self.window_manager.progress_update(value) - self.last = value + return center, radius