Example #1
0
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)
Example #2
0
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)
Example #3
0
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
Example #4
0
    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
Example #5
0
    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
Example #6
0
        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)
Example #7
0
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
Example #8
0
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
Example #9
0
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
Example #10
0
            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
Example #11
0
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
Example #12
0
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)
Example #13
0
            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