123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- #/usr/bin/python3
- import random
- import sys
- sys.path.insert(0,"/opt/LibreLight/Xdesk/")
- import lib.fixlib as fixlib
- import lib.meta as meta
- def cprint(*args):
- print(args)
- def process_wings(xfixtures,fx_prm):
- """process the wing's of selected fixtures
- input: [1,2,3,4,10,12,13,14]
- if WING = 2 return: [[1,2,3,4][14,13,12,10]]
- """
- wing_buffer = []
- fix_count = len(xfixtures)
- prm = fx_prm # ToDo: global WING for PAN/TILE !? ATTRIBUT is not availible in this moment
- if prm["WING"] > 1 and fix_count > 1:
- wing_count = fix_count // prm["WING"]
- number_of_fix_in_wing = fix_count // wing_count
- if number_of_fix_in_wing < 2:
- number_of_fix_in_wing = 2
- for i in range(number_of_fix_in_wing):
- j = i*wing_count
- wing = xfixtures[j:j+wing_count]
- if i%2!=0:
- wing = wing[::-1]
- cprint("wing",i,"j",j,"wing_count:",wing_count,"wing",wing)
- wing_buffer.append(wing)
- if fix_count > j+wing_count: # append Fixtures Left over
- wing = xfixtures[j+wing_count:]
- wing_buffer.append(wing)
- else:
- wing_buffer.append(xfixtures)
- if prm["SHUFFLE"]:
- _wing_buffer = []
- for wing in wing_buffer:
- wing = wing[:]
- random.seed(9300) # sync random
- random.shuffle(wing)
- _wing_buffer.append(wing)
- wing_buffer = _wing_buffer
- return wing_buffer
- def process_effect(wing_buffer,fx_prm,fx_prm_move,modes,jclient_send,master,FIXTURES,fx_name=""):
- jdatas = []
- offset = 0
- offset_move = 0
- start = fx_prm["START"]
- base = fx_prm["BASE"]
- for wi, wing in enumerate(wing_buffer):
- count_of_fix_in_wing = len(wing)
- coffset= 0 # 1024/count_of_fix_in_wing * (offset/255)
- coffset_move=0
-
- for fix in wing:
- if fix not in FIXTURES.fixtures:
- continue
- data = FIXTURES.fixtures[fix]
- for attr in data["ATTRIBUT"]:
- if attr.startswith("_"):
- continue
- if attr.endswith("-FINE"):
- continue
- jdata = {"MODE":"FX"}
- jdata["WING"] = wi
- jdata["VALUE"] = None
- jdata["FIX"] = fix
- dmx = fixlib.get_dmx(FIXTURES.fixtures,fix,attr)
- jdata["DMX"] = dmx
- dmx_fine = fixlib.get_dmx(FIXTURES.fixtures,fix,attr+"-FINE")
- if dmx_fine != jdata["DMX"] and dmx > 0:
- jdata["DMX-FINE"] = dmx_fine
- jdata["ATTR"] = attr
- tmp_fx_prm = fx_prm
- coffset= round(offset,1)
- if attr in ["PAN","TILT"]:
- tmp_fx_prm = fx_prm_move
- coffset_move= round(offset_move,1)
- csize = tmp_fx_prm["SIZE"]
- cspeed = tmp_fx_prm["SPEED"]
- cstart = tmp_fx_prm["START"]
- cbase = tmp_fx_prm["BASE"]
- width = tmp_fx_prm["WIDTH"]
- invert = tmp_fx_prm["INVERT"]
- fx=""
- if "SIN" in fx_name:
- fx = "sinus"
- elif "FD" in fx_name:
- fx = "fade"
- elif "RND" in fx_name:
- fx = "rnd"
- elif "STATIC" in fx_name:
- fx = "static"
- elif "ON" in fx_name:
- fx = "on"
- elif "RAMP2" in fx_name:
- fx = "bump2"
- fx = "ramp2"
- elif "RAMP" in fx_name:
- fx = "ramp"
- elif "COS" in fx_name:
- fx = "cosinus"
- if fx:
- if attr in ["PAN","TILT"]:
- cprint("SKIP FX attr:{} fix:{} " .format(attr,fix) )
- continue
- if fx:
- if cspeed < 0:
- fx = "off"
- else:
- if ":DIM" in fx_name:
- base=""
- ffxb=meta.fx_mo[fx_prm["MO"]]
- if attr == "DIM":
- if cspeed < 0:
- fx = "off"
- else:
- fx = ffxb #"fade"
- elif ":TILT" in fx_name:
- base=""
- if attr == "PAN":
- fx = "off"
- if attr == "TILT":
- if cspeed < 0:
- fx = "off"
- else:
- fx = "sinus"
- elif ":PAN" in fx_name:
- base=""
- if attr == "PAN":
- if cspeed < 0:
- fx = "off"
- else:
- fx = "cosinus"
- if attr == "TILT":
- fx = "off"
- elif ":CIR" in fx_name:
- base=""
- if attr == "PAN":
- if cspeed < 0:
- fx = "off"
- else:
- fx = "cosinus"
- if attr == "TILT":
- if cspeed < 0:
- fx = "off"
- else:
- fx = "sinus"
- elif ":RED" in f_name:
- fxon = "on"
- fxoff = "static" #"off"
- MODE = fx_modes[fx_prm["MODE"]]
-
- if "RED" in MODE:
- base="-"
- if attr == "RED":
- fx = fxon # ON ----
- #csize *=-1
- if attr == "GREEN":
- fx = "static"
- csize = 0
- if attr == "BLUE":
- fx = "static"
- csize = 0
- elif "GREEN" in MODE:
- base="-"
- if attr == "RED":
- fx = "static"
- csize = 0
- if attr == "GREEN":
- fx = fxon # ON ----
- csize *=-1
- if attr == "BLUE":
- fx = "static"
- csize = 0
- elif "BLUE" in MODE:
- base="-"
- if attr == "RED":
- fx = "static"
- csize = 0
- if attr == "GREEN":
- fx = "static"
- csize = 0
- if attr == "BLUE":
- fx = fxon # ON ----
- csize *=-1
- elif "YELLOW" in MODE:
- base="-"
- if attr == "RED":
- fx = fxon
- csize *=-1
- if attr == "GREEN":
- fx = fxon
- csize *=-1
- if attr == "BLUE":
- fx = "static"
- csize = 0
- elif "CYAN" in MODE:
- base="-"
- if attr == "RED":
- fx = fxoff
- invert *= -1
- csize = 0
- fx = fxon
- if attr == "GREEN":
- fx = fxon
- csize=0
- if attr == "BLUE":
- fx = fxon
- csize=0
- elif "MAG" in MODE:
- base="-"
- if attr == "RED":
- fx = fxon
- csize=0
- if attr == "GREEN":
- fx = fxoff
- invert *= -1
- csize = 0
- fx = fxon
- if attr == "BLUE":
- fx = fxon
- csize=0
- else:
- cprint("FX: unbekant",fx_modes[fx_prm["MODE"]],color="red")
- fxtype = fx
- fxtype = fx
- if "FX" not in data["ATTRIBUT"][attr]:
- data["ATTRIBUT"][attr]["FX"] =""
- if "FX2" not in data["ATTRIBUT"][attr]:
- data["ATTRIBUT"][attr]["FX2"] ={}
- if data["ATTRIBUT"][attr]["ACTIVE"] and fxtype:
- fjdata = {}
- if cspeed < 0.1:
- fjdata["TYPE"] = "off"
- else:
- fjdata["TYPE"] = fxtype
- fjdata["SIZE"] = round(csize,2)
- fjdata["SPEED"] = round(cspeed,2)
- fjdata["WIDTH"] = int(width)
- fjdata["START"] = cstart
- if attr in ["PAN","TILT"]:
- fjdata["OFFSET"]= round(coffset_move,2)
- else:
- fjdata["OFFSET"]= round(coffset,2)
- fjdata["INVERT"]= int(invert)
- fjdata["BASE"] = cbase
- jdata["FX2"] = fjdata
- data["ATTRIBUT"][attr]["FX2"] = fjdata
- jdatas.append(jdata)
- #print("GOO FX:",jdata)
-
- if fx_prm_move["OFFSET"] > 0.5: # and
- aoffset_move = (100/count_of_fix_in_wing) * (fx_prm_move["OFFSET"]/100)
- if fx_prm_move["DIR"] <= 0:
- offset_move -= aoffset_move
- else:
- offset_move += aoffset_move
- offset_move = round(offset_move,2)
- if fx_prm["OFFSET"] > 0.5: # and
- aoffset = (100/count_of_fix_in_wing) * (fx_prm["OFFSET"]/100)
- if fx_prm["DIR"] <= 0:
- offset -= aoffset
- else:
- offset += aoffset
- offset = round(offset,2)
- #exit()
- if jdatas and not modes.val("BLIND"):
- jclient_send(jdatas)
- master._refresh_fix()
- return jdatas
|