def addFilterValueSublayer(name, parentLayer, cs, userDefinedValues): source = paraview.simple.FindSource(name) # plane offset generator (for Slice or Clip) def generateOffsetValues(): bounds = source.Input.GetDataInformation().DataInformation.GetBounds() minPoint = np.array([bounds[0], bounds[2], bounds[4]]) maxPoint = np.array([bounds[1], bounds[3], bounds[5]]) scaleVec = maxPoint - minPoint # adjust offset size depending on the plane orientation if hasattr(source, 'SliceType'): n = source.SliceType.Normal elif hasattr(source, 'ClipType'): n = source.ClipType.Normal sNormal = np.array([n[0] * scaleVec[0], n[1] * scaleVec[1], n[2] * scaleVec[2]]) steps = 5 # generate 5 slice offsets offsetStep = np.linalg.norm(sNormal) / steps values = np.arange(-(steps/2), steps/2) * offsetStep return values.tolist() # generate values depending on the type of filter if isinstance(source, paraview.simple.servermanager.filters.Clip): # grab values from ui or generate defaults values = userDefinedValues[name] if (name in userDefinedValues) else generateOffsetValues() if len(values) == 0: values = generateOffsetValues() # add sublayer and create the appropriate track cs.add_sublayer(name, cinema_store.make_parameter(name, values), parentLayer, name) cs.assign_parameter_dependence("color" + name, name, values) explorerDir[name] = pv_explorers.Clip(name, source) elif isinstance(source, paraview.simple.servermanager.filters.Slice): # grab values from ui or generate defaults values = userDefinedValues[name] if (name in userDefinedValues) else generateOffsetValues() if len(values) == 0: values = generateOffsetValues() # add sublayer and create the appropriate track cs.add_sublayer(name, cinema_store.make_parameter(name, values), parentLayer, name) cs.assign_parameter_dependence("color" + name, name, values) explorerDir[name] = pv_explorers.Slice(name, source) elif isinstance(source, paraview.simple.servermanager.filters.Contour): def generateContourValues(): # grab values from ui or generate defaults vRange = source.Input.GetDataInformation().DataInformation.GetPointDataInformation().GetArrayInformation(0).GetComponentRange(0) return np.linspace(vRange[0], vRange[1], 5).tolist() # generate 5 contour values values = userDefinedValues[name] if (name in userDefinedValues) else generateContourValues() if len(values) == 0: values = generateContourValues() # add sublayer and create the appropriate track cs.add_sublayer(name, cinema_store.make_parameter(name, values), parentLayer, name) cs.assign_parameter_dependence("color" + name, name, values) explorerDir[name] = pv_explorers.Contour(name, source)
def add_filter_value(name, cs, userDefinedValues): source = paraview.simple.FindSource(name) # plane offset generator (for Slice or Clip) def generate_offset_values(): bounds = source.Input.GetDataInformation().DataInformation.GetBounds() minPoint = np.array([bounds[0], bounds[2], bounds[4]]) maxPoint = np.array([bounds[1], bounds[3], bounds[5]]) scaleVec = maxPoint - minPoint # adjust offset size depending on the plane orientation if hasattr(source, 'SliceType'): n = source.SliceType.Normal elif hasattr(source, 'ClipType'): n = source.ClipType.Normal sNormal = np.array([n[0] * scaleVec[0], n[1] * scaleVec[1], n[2] * scaleVec[2]]) steps = 3 # generate N slice offsets offsetStep = np.linalg.norm(sNormal) / steps values = np.arange(-(steps/2), steps/2) * offsetStep return values.tolist() # generate values depending on the type of filter if isinstance(source, paraview.simple.servermanager.filters.Clip): # grab values from ui or generate defaults values = userDefinedValues[name] if (name in userDefinedValues) else generate_offset_values() if len(values) == 0: values = generate_offset_values() # add sublayer and create the appropriate track cs.add_control(name, cinema_store.make_parameter(name, values, typechoice='hidden')) explorerDir[name] = pv_explorers.Clip(name, source) elif isinstance(source, paraview.simple.servermanager.filters.Slice): # grab values from ui or generate defaults values = userDefinedValues[name] if (name in userDefinedValues) else generate_offset_values() if len(values) == 0: values = generate_offset_values() # add sublayer and create the appropriate track cs.add_control(name, cinema_store.make_parameter(name, values, typechoice='hidden')) explorerDir[name] = pv_explorers.Slice(name, source) elif isinstance(source, paraview.simple.servermanager.filters.Contour): def generate_contour_values(): # grab values from ui or generate defaults vRange = source.Input.GetDataInformation().DataInformation.GetPointDataInformation().GetArrayInformation(0).GetComponentRange(0) return np.linspace(vRange[0], vRange[1], 5).tolist() # generate 5 contour values values = userDefinedValues[name] if (name in userDefinedValues) else generate_contour_values() if len(values) == 0: values = generate_contour_values() # add sublayer and create the appropriate track cs.add_control(name, cinema_store.make_parameter(name, values, typechoice='hidden')) explorerDir[name] = pv_explorers.Contour(name, source)
def add_filter_value(name, cs, userDefinedValues): """creates controls for the filters that we know how to manipulate""" source = paraview.simple.FindSource(name) # generate values depending on the type of filter if isinstance(source, paraview.simple.servermanager.filters.Clip): # grab values from ui values = [] if (source in userDefinedValues): if ("OffsetValues" in userDefinedValues[source]): values = userDefinedValues[source]["OffsetValues"] if len(values) == 0: #nothing asked for just leave as is return False # add sublayer and create the appropriate track cs.add_control(name, cinema_store.make_parameter(name, values, typechoice='hidden')) explorerDir[name] = pv_explorers.Clip(name, source) return True elif isinstance(source, paraview.simple.servermanager.filters.Slice): # grab values from ui values = [] if (source in userDefinedValues): if ("SliceOffsetValues" in userDefinedValues[source]): values = userDefinedValues[source]["SliceOffsetValues"] if len(values) == 0: #nothing asked for just leave as is return False # add sublayer and create the appropriate track cs.add_control(name, cinema_store.make_parameter(name, values, typechoice='hidden')) explorerDir[name] = pv_explorers.Slice(name, source) return True elif isinstance(source, paraview.simple.servermanager.filters.Contour): # grab values from ui values = [] if (source in userDefinedValues): if ("Isosurfaces" in userDefinedValues[source]): values = userDefinedValues[source]["Isosurfaces"] if len(values) == 0: #nothing asked for just leave as is return False # add sublayer and create the appropriate track cs.add_control(name, cinema_store.make_parameter(name, values, typechoice='hidden')) explorerDir[name] = pv_explorers.Contour(name, source) return True
def add_control_and_colors(snames, layername): """ helper that adds a layer for the visibility setting (on/off) and sublayer for the visible fields of an object. """ for s in snames: #a sublayer for the visibility of each object vparam = cinema_store.make_parameter(layername + s, ["ON", "OFF"]) cs.add_sublayer(layername + s, vparam, layername, s) #make up list of color options fields = {'depth': 'depth', 'luminance': 'luminance'} ranges = {} sp = paraview.simple.FindSource(s) defaultName = None cda = sp.GetCellDataInformation() for a in range(0, cda.GetNumberOfArrays()): arr = cda.GetArray(a) arrName = arr.GetName() if not arrName == "Normals": for i in range(0, arr.GetNumberOfComponents()): fName = arrName + "_" + str(i) fields[fName] = 'value' ranges[fName] = arr.GetRange(i) if defaultName == None: defaultName = fName pda = sp.GetPointDataInformation() for a in range(0, pda.GetNumberOfArrays()): arr = pda.GetArray(a) arrName = arr.GetName() if not arrName == "Normals": for i in range(0, arr.GetNumberOfComponents()): fName = arrName + "_" + str(i) fields[fName] = 'value' ranges[fName] = arr.GetRange(i) if defaultName == None: defaultName = fName if defaultName == None: fields['white'] = 'rgb' defaultName = 'white' cparam = cinema_store.make_field("color" + s, fields, default=defaultName, valueRanges=ranges) cs.add_field("color" + s, cparam, layername + s, "ON") #remember my parameter name for my dependees objhomes[asdict[s]['id']] = layername + s
def add_control_and_colors(snames, layername): """ helper that adds a layer for the visibility setting (on/off) and sublayer for the visible fields of an object. """ for s in snames: #a sublayer for the visibility of each object vparam = cinema_store.make_parameter(layername+s, ["ON","OFF"]) cs.add_sublayer(layername+s, vparam, layername, s) #make up list of color options fields = {'depth':'depth','luminance':'luminance'} ranges = {} sp = paraview.simple.FindSource(s) defaultName = None cda = sp.GetCellDataInformation() for a in range(0, cda.GetNumberOfArrays()): arr = cda.GetArray(a) arrName = arr.GetName() if not arrName == "Normals": for i in range(0, arr.GetNumberOfComponents()): fName = arrName+"_"+str(i) fields[fName] = 'value' ranges[fName] = arr.GetRange(i) if defaultName == None: defaultName = fName pda = sp.GetPointDataInformation() for a in range(0, pda.GetNumberOfArrays()): arr = pda.GetArray(a) arrName = arr.GetName() if not arrName == "Normals": for i in range(0, arr.GetNumberOfComponents()): fName = arrName+"_"+str(i) fields[fName] = 'value' ranges[fName] = arr.GetRange(i) if defaultName == None: defaultName = fName if defaultName == None: fields['white']='rgb' defaultName='white' cparam = cinema_store.make_field("color"+s, fields, default=defaultName, valueRanges=ranges) cs.add_field("color"+s,cparam,layername+s,"ON") #remember my parameter name for my dependees objhomes[asdict[s]['id']] = layername+s
cs.load() tprop = cs.get_parameter('time') tvalues = tprop['values'] #start with clean slate, other than time cs = cinema_store.FileStore(ocsfname) except IOError, KeyError: pass cs.add_metadata({'type':'composite-image-stack'}) cs.add_metadata({'store_type':'FS'}) cs.add_metadata({'version':'0.0'}) pipeline = get_pipeline() cs.add_metadata({'pipeline':pipeline}) vis = [proxy['name'] for proxy in proxies] cs.add_layer("vis",cinema_store.make_parameter('vis', vis)) for proxy in proxies: proxy_name = proxy['name'] add_filter_value(proxy_name,cs,_userDefinedValues) dependency_set = set([proxy['id']]) repeat = True while repeat: repeat = False deps = set(proxy['id'] for proxy in proxies if proxy['parent'] in dependency_set) if deps - dependency_set: dependency_set = dependency_set.union(deps) repeat = True dependency_list = [proxy['name'] for proxy in proxies if proxy['id'] in dependency_set] cs.assign_parameter_dependence(proxy_name,'vis',dependency_list) add_control_and_colors(proxy_name,cs)
def make_cinema_store(proxies, ocsfname, view, forcetime=False, userDefined = {}, specLevel = "A", camType='phi-theta'): """ Takes in the pipeline, structured as a tree, and makes a cinema store definition containing all the parameters we will vary. """ if "phi" in userDefined: phis = userDefined["phi"] else: #phis = [0,45,90,135,180,225,270,315,360] phis = [0,180,360] if "theta" in userDefined: thetas = userDefined["theta"] else: #thetas = [0,20,40,60,80,100,120,140,160,180] thetas = [0,90,180] if "roll" in userDefined: rolls = userDefined["roll"] else: rolls = [0,45,90,135,180,225,270,315] if camType == 'static' or camType == 'phi-theta': rolls = [0] tvalues = [] eye_values = [] at_values = [] up_values = [] cs = cinema_store.FileStore(ocsfname) try: cs.load() tprop = cs.get_parameter('time') tvalues = tprop['values'] if 'camera_eye' in cs.metadata: eye_values = cs.metadata['camera_eye'] if 'camera_at' in cs.metadata: at_values = cs.metadata['camera_at'] if 'camera_up' in cs.metadata: up_values = cs.metadata['camera_up'] #start with clean slate, other than time cs = cinema_store.FileStore(ocsfname) except (IOError, KeyError): pass cs.add_metadata({'store_type':'FS'}) if specLevel == "A": cs.add_metadata({'type':'parametric-image-stack'}) cs.add_metadata({'version':'0.0'}) if specLevel == "B": cs.add_metadata({'type':'composite-image-stack'}) cs.add_metadata({'version':'0.1'}) pipeline = get_pipeline() cs.add_metadata({'pipeline':pipeline}) cs.add_metadata({'camera_model':camType}) cs.add_metadata({'camera_eye':eye_values}) cs.add_metadata({'camera_at':at_values}) cs.add_metadata({'camera_up':up_values}) vis = [proxy['name'] for proxy in proxies] if specLevel == "A": pass else: cs.add_layer("vis",cinema_store.make_parameter('vis', vis)) pnames = [] for proxy in proxies: proxy_name = proxy['name'] ret = add_filter_value(proxy_name, cs, userDefined) if specLevel == "A" and ret: pnames.append(proxy_name) dependency_set = set([proxy['id']]) repeat = True while repeat: repeat = False deps = set(proxy['id'] for proxy in proxies if proxy['parent'] in dependency_set) if deps - dependency_set: dependency_set = dependency_set.union(deps) repeat = True dependency_list = [proxy['name'] for proxy in proxies if proxy['id'] in dependency_set] if specLevel == "A": pass else: cs.assign_parameter_dependence(proxy_name,'vis',dependency_list) add_control_and_colors(proxy_name, cs, userDefined) cs.assign_parameter_dependence("color"+proxy_name,'vis',[proxy_name]) fnp = "" if forcetime: #time specified, use it, being careful to append if already a list tvalues.append(forcetime) tprop = cinema_store.make_parameter('time', tvalues) cs.add_parameter('time', tprop) fnp = "{time}" else: #time not specified, try and make them automatically times = paraview.simple.GetAnimationScene().TimeKeeper.TimestepValues if not times: pass else: prettytimes = [float_limiter(t) for t in times] cs.add_parameter("time", cinema_store.make_parameter('time', prettytimes)) fnp = "{time}" if camType == "static": pass elif camType == "phi-theta": cs.add_parameter("phi", cinema_store.make_parameter('phi', phis)) cs.add_parameter("theta", cinema_store.make_parameter('theta', thetas)) if fnp == "": fnp = "{phi}/{theta}" else: fnp = fnp + "/{phi}/{theta}" else: #for AER and YPR, make up a set of view matrices corresponding #to the requested number of samples in each axis def MatrixMul( mtx_a, mtx_b): tpos_b = zip( *mtx_b) rtn = [[ sum( ea*eb for ea,eb in zip(a,b)) for b in tpos_b] for a in mtx_a] return rtn cam = view.GetActiveCamera() poses = [] #holds phi, theta and roll angle tuples matrices = [] #holds corresponding transform matrices v = rolls[0] rolls = [] if v < 2: rolls.append(0); else: j = -180 while j<180: rolls.append(j) j = j+360/v v = thetas[0] thetas = [] if v < 2: thetas.append(0); else: j = -90 while j<=90: thetas.append(j) j = j+180/v for r in rolls: for t in thetas: v = phis[0] if v < 2: poses.append((0,t,r)) else: #sample longitude less frequently toward the pole increment_Scale = math.cos(math.pi*t/180.0) if increment_Scale == 0: increment_Scale = 1 #increment_Scale = 1 #for easy comparison p = -180 while p<180: poses.append((p,t,r)) p = p+360/(v*increment_Scale) #default is one closest to 0,0,0 dist = math.sqrt((poses[0][0]*poses[0][0]) + (poses[0][1]*poses[0][1]) + (poses[0][2]*poses[0][2])) default_mat = 0 for i in poses: p,t,r = i cP = math.cos(-math.pi*(p/180.0)) #phi is right to left sP = math.sin(-math.pi*(p/180.0)) cT = math.cos(-math.pi*(t/180.0)) #theta is up down sT = math.sin(-math.pi*(t/180.0)) cR = math.cos(-math.pi*(r/180.0)) #roll is around gaze direction sR = math.sin(-math.pi*(r/180.0)) rY = [ [cP,0,sP], [0,1,0], [-sP,0,cP] ] #x,z interchange rX = [ [1,0,0], [0,cT,-sT], [0,sT,cT] ] #y,z interchange rZ = [ [cR,-sR,0], [sR,cR,0], [0,0,1] ] #x,y interchange m1 = [ [1,0,0], [0,1,0], [0,0,1] ] m2 = MatrixMul(m1,rY) m3 = MatrixMul(m2,rX) m4 = MatrixMul(m3,rZ) matrices.append(m4) newdist = math.sqrt(p*p+t*t+r*r) if newdist < dist: default_mat = m4 dist = newdist cs.add_parameter("pose", cinema_store.make_parameter('pose', matrices, default=default_mat)) fnp = fnp+"{pose}.png" if specLevel == "A": for pname in pnames: if fnp == "": fnp = "{"+pname+"}" else: fnp = fnp+"/{"+pname+"}" if fnp == "": fnp = "image" fnp = fnp+".png" cs.filename_pattern = fnp return cs
def make_cinema_store(proxies, ocsfname, view, forcetime=False, userDefined={}, specLevel="A", camType='phi-theta'): """ Takes in the pipeline, structured as a tree, and makes a cinema store definition containing all the parameters we will vary. """ if "phi" in userDefined: phis = userDefined["phi"] else: #phis = [0,45,90,135,180,225,270,315,360] phis = [0, 180, 360] if "theta" in userDefined: thetas = userDefined["theta"] else: #thetas = [0,20,40,60,80,100,120,140,160,180] thetas = [0, 90, 180] if "roll" in userDefined: rolls = userDefined["roll"] else: rolls = [0, 45, 90, 135, 180, 225, 270, 315] if camType == 'static' or camType == 'phi-theta': rolls = [0] tvalues = [] eye_values = [] at_values = [] up_values = [] cs = cinema_store.FileStore(ocsfname) try: cs.load() tprop = cs.get_parameter('time') tvalues = tprop['values'] if 'camera_eye' in cs.metadata: eye_values = cs.metadata['camera_eye'] if 'camera_at' in cs.metadata: at_values = cs.metadata['camera_at'] if 'camera_up' in cs.metadata: up_values = cs.metadata['camera_up'] #start with clean slate, other than time cs = cinema_store.FileStore(ocsfname) except (IOError, KeyError): pass cs.add_metadata({'store_type': 'FS'}) if specLevel == "A": cs.add_metadata({'type': 'parametric-image-stack'}) cs.add_metadata({'version': '0.0'}) if specLevel == "B": cs.add_metadata({'type': 'composite-image-stack'}) cs.add_metadata({'version': '0.1'}) pipeline = get_pipeline() cs.add_metadata({'pipeline': pipeline}) cs.add_metadata({'camera_model': camType}) cs.add_metadata({'camera_eye': eye_values}) cs.add_metadata({'camera_at': at_values}) cs.add_metadata({'camera_up': up_values}) vis = [proxy['name'] for proxy in proxies] if specLevel == "A": pass else: cs.add_layer("vis", cinema_store.make_parameter('vis', vis)) pnames = [] for proxy in proxies: proxy_name = proxy['name'] ret = add_filter_value(proxy_name, cs, userDefined) if specLevel == "A" and ret: pnames.append(proxy_name) dependency_set = set([proxy['id']]) repeat = True while repeat: repeat = False deps = set(proxy['id'] for proxy in proxies if proxy['parent'] in dependency_set) if deps - dependency_set: dependency_set = dependency_set.union(deps) repeat = True dependency_list = [ proxy['name'] for proxy in proxies if proxy['id'] in dependency_set ] if specLevel == "A": pass else: cs.assign_parameter_dependence(proxy_name, 'vis', dependency_list) add_control_and_colors(proxy_name, cs, userDefined) cs.assign_parameter_dependence("color" + proxy_name, 'vis', [proxy_name]) fnp = "" if forcetime: #time specified, use it, being careful to append if already a list tvalues.append(forcetime) tprop = cinema_store.make_parameter('time', tvalues) cs.add_parameter('time', tprop) fnp = "{time}" else: #time not specified, try and make them automatically times = paraview.simple.GetAnimationScene().TimeKeeper.TimestepValues if not times: pass else: prettytimes = [float_limiter(t) for t in times] cs.add_parameter("time", cinema_store.make_parameter('time', prettytimes)) fnp = "{time}" if camType == "static": pass elif camType == "phi-theta": cs.add_parameter("phi", cinema_store.make_parameter('phi', phis)) cs.add_parameter("theta", cinema_store.make_parameter('theta', thetas)) if fnp == "": fnp = "{phi}/{theta}" else: fnp = fnp + "/{phi}/{theta}" else: #for AER and YPR, make up a set of view matrices corresponding #to the requested number of samples in each axis def MatrixMul(mtx_a, mtx_b): tpos_b = zip(*mtx_b) rtn = [[sum(ea * eb for ea, eb in zip(a, b)) for b in tpos_b] for a in mtx_a] return rtn cam = view.GetActiveCamera() poses = [] #holds phi, theta and roll angle tuples matrices = [] #holds corresponding transform matrices v = rolls[0] rolls = [] if v < 2: rolls.append(0) else: j = -180 while j < 180: rolls.append(j) j = j + 360 / v v = thetas[0] thetas = [] if v < 2: thetas.append(0) else: j = -90 while j <= 90: thetas.append(j) j = j + 180 / v for r in rolls: for t in thetas: v = phis[0] if v < 2: poses.append((0, t, r)) else: #sample longitude less frequently toward the pole increment_Scale = math.cos(math.pi * t / 180.0) if increment_Scale == 0: increment_Scale = 1 #increment_Scale = 1 #for easy comparison p = -180 while p < 180: poses.append((p, t, r)) p = p + 360 / (v * increment_Scale) #default is one closest to 0,0,0 dist = math.sqrt((poses[0][0] * poses[0][0]) + (poses[0][1] * poses[0][1]) + (poses[0][2] * poses[0][2])) default_mat = 0 for i in poses: p, t, r = i cP = math.cos(-math.pi * (p / 180.0)) #phi is right to left sP = math.sin(-math.pi * (p / 180.0)) cT = math.cos(-math.pi * (t / 180.0)) #theta is up down sT = math.sin(-math.pi * (t / 180.0)) cR = math.cos(-math.pi * (r / 180.0)) #roll is around gaze direction sR = math.sin(-math.pi * (r / 180.0)) rY = [[cP, 0, sP], [0, 1, 0], [-sP, 0, cP]] #x,z interchange rX = [[1, 0, 0], [0, cT, -sT], [0, sT, cT]] #y,z interchange rZ = [[cR, -sR, 0], [sR, cR, 0], [0, 0, 1]] #x,y interchange m1 = [[1, 0, 0], [0, 1, 0], [0, 0, 1]] m2 = MatrixMul(m1, rY) m3 = MatrixMul(m2, rX) m4 = MatrixMul(m3, rZ) matrices.append(m4) newdist = math.sqrt(p * p + t * t + r * r) if newdist < dist: default_mat = m4 dist = newdist cs.add_parameter( "pose", cinema_store.make_parameter('pose', matrices, default=default_mat)) fnp = fnp + "{pose}.png" if specLevel == "A": for pname in pnames: if fnp == "": fnp = "{" + pname + "}" else: fnp = fnp + "/{" + pname + "}" if fnp == "": fnp = "image" fnp = fnp + ".png" cs.filename_pattern = fnp return cs
def add_filter_value(name, cs, userDefinedValues): """creates controls for the filters that we know how to manipulate""" source = paraview.simple.FindSource(name) # generate values depending on the type of filter if isinstance(source, paraview.simple.servermanager.filters.Clip): # grab values from ui values = [] if (source in userDefinedValues): if ("OffsetValues" in userDefinedValues[source]): values = userDefinedValues[source]["OffsetValues"] if len(values) == 0: #nothing asked for just leave as is return False # add sublayer and create the appropriate track cs.add_control( name, cinema_store.make_parameter(name, values, typechoice='hidden')) explorerDir[name] = pv_explorers.Clip(name, source) return True elif isinstance(source, paraview.simple.servermanager.filters.Slice): # grab values from ui values = [] if (source in userDefinedValues): if ("SliceOffsetValues" in userDefinedValues[source]): values = userDefinedValues[source]["SliceOffsetValues"] if len(values) == 0: #nothing asked for just leave as is return False # add sublayer and create the appropriate track cs.add_control( name, cinema_store.make_parameter(name, values, typechoice='hidden')) explorerDir[name] = pv_explorers.Slice(name, source) return True elif isinstance(source, paraview.simple.servermanager.filters.Contour): # grab values from ui values = [] if (source in userDefinedValues): if ("Isosurfaces" in userDefinedValues[source]): values = userDefinedValues[source]["Isosurfaces"] if len(values) == 0: #nothing asked for just leave as is return False # add sublayer and create the appropriate track cs.add_control( name, cinema_store.make_parameter(name, values, typechoice='hidden')) explorerDir[name] = pv_explorers.Contour(name, source) return True
families[pid] = siblings #add layer containing all objects that share a common dependency for parent, siblings in families.iteritems(): #print parent, siblings asdict = {} layername = "layer"+str(lcnt) snames = [] for s in siblings: name = s['name'] asdict[name] = s snames.append(name) addFilterValueSublayer(name, layername, cs, _userDefinedValues) param = cinema_store.make_parameter(layername, snames) if parent == '0': cs.add_layer(layername, param) add_control_and_colors(snames, layername) else: #look up name of my parent's parameter #print "SEEK OBJHOME of " + parent, "is", parentlayername = objhomes[parent] #print parentlayername cs.add_sublayer(layername, param, parentlayername, "OFF") add_control_and_colors(snames, layername) lcnt = lcnt + 1; fnp = "" if forcetime: #time specified, use it, being careful to append if already a list
def make_cinema_store(levels, ocsfname, _phis=None, _thetas=None): """ Takes in the pipeline, structured as a tree, and makes a cinema store definition containing all the parameters we might will vary. """ phis = _phis if phis==None: phis = [0,45,90,135,180,225,270,315,360] phis = [0,180,360] thetas = _thetas if thetas==None: thetas = [0,20,40,60,80,100,120,140,160,180] thetas = [0,90,180] def add_control_and_colors(snames, layername): """ helper that adds a layer for the visibility setting (on/off) and sublayer for the visible fields of an object. """ for s in snames: #a sublayer for the visibility of each object vparam = cinema_store.make_parameter(layername+s, ["ON","OFF"]) cs.add_sublayer(layername+s, vparam, layername, s) #make up list of color options fields = {'depth':'depth','luminance':'luminance'} ranges = {} sp = paraview.simple.FindSource(s) defaultName = None cda = sp.GetCellDataInformation() for a in range(0, cda.GetNumberOfArrays()): arr = cda.GetArray(a) arrName = arr.GetName() if not arrName == "Normals": for i in range(0, arr.GetNumberOfComponents()): fName = arrName+"_"+str(i) fields[fName] = 'value' ranges[fName] = arr.GetRange(i) if defaultName == None: defaultName = fName pda = sp.GetPointDataInformation() for a in range(0, pda.GetNumberOfArrays()): arr = pda.GetArray(a) arrName = arr.GetName() if not arrName == "Normals": for i in range(0, arr.GetNumberOfComponents()): fName = arrName+"_"+str(i) fields[fName] = 'value' ranges[fName] = arr.GetRange(i) if defaultName == None: defaultName = fName if defaultName == None: fields['white']='rgb' defaultName='white' cparam = cinema_store.make_field("color"+s, fields, default=defaultName, valueRanges=ranges) cs.add_field("color"+s,cparam,layername+s,"ON") #remember my parameter name for my dependees objhomes[asdict[s]['id']] = layername+s cs = cinema_store.FileStore(ocsfname) lcnt = 0 objhomes = {} objnames = {} for level in levels: families = {} for listElt in level: objnames[listElt['id']] = listElt['name'] #who are my siblings? - I can share a sub_layer with them. pid = listElt['parent'] siblings = [] if pid in families: siblings = families[pid] siblings.append(listElt) families[pid] = siblings #add layer containing all objects that share a common dependency for parent, siblings in families.iteritems(): #print parent, siblings asdict = {} layername = "layer"+str(lcnt) snames = [] for s in siblings: asdict[s['name']] = s snames.append(s['name']) param = cinema_store.make_parameter(layername, snames) if parent == '0': cs.add_layer(layername, param) add_control_and_colors(snames, layername) else: #look up name of my parent's parameter #print "SEEK OBJHOME of " + parent, "is", parentlayername = objhomes[parent] #print parentlayername cs.add_sublayer(layername, param, parentlayername, "OFF") add_control_and_colors(snames, layername) lcnt = lcnt + 1; fnp = "" times = paraview.simple.GetAnimationScene().TimeKeeper.TimestepValues if not times: pass else: prettytimes = [float_limiter(x) for x in times] cs.add_parameter("time", cinema_store.make_parameter('time', prettytimes)) fnp = fnp+"{time}_" cs.add_parameter("phi", cinema_store.make_parameter('phi', phis)) cs.add_parameter("theta", cinema_store.make_parameter('theta', thetas)) fnp = fnp+"{phi}_{theta}/{layer0}.png" cs.filename_pattern = fnp cs.save() return cs
def add_filter_value(name, cs, userDefinedValues): """creates controls for the filters that we know how to manipulate""" source = paraview.simple.FindSource(name) # plane offset generator (for Slice or Clip) def generate_offset_values(): bounds = source.Input.GetDataInformation().DataInformation.GetBounds() minPoint = np.array([bounds[0], bounds[2], bounds[4]]) maxPoint = np.array([bounds[1], bounds[3], bounds[5]]) scaleVec = maxPoint - minPoint # adjust offset size depending on the plane orientation if hasattr(source, 'SliceType'): n = source.SliceType.Normal elif hasattr(source, 'ClipType'): n = source.ClipType.Normal sNormal = np.array([n[0] * scaleVec[0], n[1] * scaleVec[1], n[2] * scaleVec[2]]) steps = 3 # generate N slice offsets offsetStep = np.linalg.norm(sNormal) / steps values = np.arange(-(steps/2), steps/2) * offsetStep return values.tolist() # generate values depending on the type of filter if isinstance(source, paraview.simple.servermanager.filters.Clip): # grab values from ui or generate defaults values = [] if (source in userDefinedValues): if ("OffsetValues" in userDefinedValues[source]): values = userDefinedValues[source]["OffsetValues"] if len(values) == 0: values = generate_offset_values() # add sublayer and create the appropriate track cs.add_control(name, cinema_store.make_parameter(name, values, typechoice='hidden')) explorerDir[name] = pv_explorers.Clip(name, source) elif isinstance(source, paraview.simple.servermanager.filters.Slice): # grab values from ui or generate defaults values = [] if (source in userDefinedValues): if ("SliceOffsetValues" in userDefinedValues[source]): values = userDefinedValues[source]["SliceOffsetValues"] if len(values) == 0: values = generate_offset_values() # add sublayer and create the appropriate track cs.add_control(name, cinema_store.make_parameter(name, values, typechoice='hidden')) explorerDir[name] = pv_explorers.Slice(name, source) elif isinstance(source, paraview.simple.servermanager.filters.Contour): def generate_contour_values(): # grab values from ui or generate defaults vRange = source.Input.GetDataInformation().DataInformation.GetPointDataInformation().GetArrayInformation(0).GetComponentRange(0) return np.linspace(vRange[0], vRange[1], 5).tolist() # generate 5 contour values # grab values from ui or generate defaults values = [] if (source in userDefinedValues): if ("Isosurfaces" in userDefinedValues[source]): values = userDefinedValues[source]["Isosurfaces"] if len(values) == 0: values = generate_contour_values() # add sublayer and create the appropriate track cs.add_control(name, cinema_store.make_parameter(name, values, typechoice='hidden')) explorerDir[name] = pv_explorers.Contour(name, source)
families[pid] = siblings #add layer containing all objects that share a common dependency for parent, siblings in families.iteritems(): #print parent, siblings asdict = {} layername = "layer" + str(lcnt) snames = [] for s in siblings: name = s['name'] asdict[name] = s snames.append(name) addFilterValueSublayer(name, layername, cs, _userDefinedValues) param = cinema_store.make_parameter(layername, snames) if parent == '0': cs.add_layer(layername, param) add_control_and_colors(snames, layername) else: #look up name of my parent's parameter #print "SEEK OBJHOME of " + parent, "is", parentlayername = objhomes[parent] #print parentlayername cs.add_sublayer(layername, param, parentlayername, "OFF") add_control_and_colors(snames, layername) lcnt = lcnt + 1 fnp = "" if forcetime: #time specified, use it, being careful to append if already a list