|
@@ -138,6 +138,10 @@ def get_fx3_grid():
|
|
|
|
|
|
def reshape_grid_to_jdata(grid_data1):
|
|
def reshape_grid_to_jdata(grid_data1):
|
|
grid_data2 = {}
|
|
grid_data2 = {}
|
|
|
|
+ if not grid_data1:
|
|
|
|
+ print("reshape_grid_to_jdata() no grid_data2 !")
|
|
|
|
+ return grid_data2
|
|
|
|
+
|
|
for i in grid_data1:
|
|
for i in grid_data1:
|
|
attr = i["ATTR"].strip()
|
|
attr = i["ATTR"].strip()
|
|
if attr:
|
|
if attr:
|
|
@@ -192,27 +196,50 @@ def correct_base(grid_data3):
|
|
else:
|
|
else:
|
|
v["FX2"]["BASE"] = "0"
|
|
v["FX2"]["BASE"] = "0"
|
|
|
|
|
|
-def calculate_offset(grid_data3):
|
|
|
|
- fix = extract_fixture_list(grid_data3)
|
|
|
|
- offset = {}
|
|
|
|
- offset_len = len(fix)-1
|
|
|
|
|
|
+def calculate_offset(grid_data3,wing=None):
|
|
|
|
+ if wing is None:
|
|
|
|
+ fix = extract_fixture_list(grid_data3)
|
|
|
|
+ else:
|
|
|
|
+ fix = wing
|
|
|
|
|
|
#print()
|
|
#print()
|
|
- for i,f in enumerate(fix):
|
|
|
|
|
|
+ print("---"*10)
|
|
|
|
+ offset = {}
|
|
|
|
+ if not wing:
|
|
|
|
+ cprint("calculate_offset not wing !")
|
|
|
|
+ return
|
|
|
|
+ if len(wing) <= 0:
|
|
|
|
+ cprint("calculate_offset not wing !")
|
|
|
|
+ return
|
|
|
|
+
|
|
|
|
+ offset_len = len(wing[0])-1
|
|
|
|
+ if offset_len <= 0:
|
|
|
|
+ offset_len = 1
|
|
|
|
+
|
|
|
|
+ #offset = grid_data3[0]["FX2"]["OFFSET"]/offset_len
|
|
|
|
+
|
|
|
|
+ for k,v in enumerate(grid_data3):
|
|
|
|
+ _offset = v["FX2"]["OFFSET"]
|
|
|
|
+ attr = v["ATTR"]
|
|
|
|
+ if attr not in offset:
|
|
|
|
+ offset[attr] = 0
|
|
|
|
+ offset[attr] += _offset/offset_len
|
|
|
|
+
|
|
|
|
+ for i,wing in enumerate(fix):
|
|
|
|
+ for j,f in enumerate(wing):
|
|
|
|
+ print(i,j)
|
|
|
|
|
|
- for k,v in enumerate(grid_data3):
|
|
|
|
- if f != v["FIX"]:
|
|
|
|
- continue
|
|
|
|
|
|
|
|
- _offset = v["FX2"]["OFFSET"]
|
|
|
|
- attr = v["ATTR"]
|
|
|
|
- if attr not in offset:
|
|
|
|
- offset[attr] = 0
|
|
|
|
- offset[attr] += _offset/offset_len
|
|
|
|
|
|
+ for k,v in enumerate(grid_data3):
|
|
|
|
+ if f != v["FIX"]:
|
|
|
|
+ continue
|
|
|
|
|
|
- nof = round( offset[attr]*i,2 ) # ID
|
|
|
|
- v["FX2"]["OFFSET"] = nof
|
|
|
|
- #print("x_offset: ",k,v["FIX"],v["ATTR"],offset,nof)
|
|
|
|
|
|
+ attr = v["ATTR"]
|
|
|
|
+
|
|
|
|
+ nof = round( offset[attr]*j,2 ) # ID
|
|
|
|
+ v["FX2"]["OFFSET"] = nof
|
|
|
|
+ v["FX2"]["WING"] = i
|
|
|
|
+ print(" ",f,attr,v["FX2"],nof)
|
|
|
|
|
|
def merge_grid_and_programmer(programmer,grid_data2):
|
|
def merge_grid_and_programmer(programmer,grid_data2):
|
|
out=[]
|
|
out=[]
|
|
@@ -241,6 +268,44 @@ def log(x,name="log",color="yellow"):
|
|
for k,v in enumerate(x):
|
|
for k,v in enumerate(x):
|
|
cprint(name,[k,v],color=color)
|
|
cprint(name,[k,v],color=color)
|
|
|
|
|
|
|
|
+import lib.fxlib as fxlib
|
|
|
|
+
|
|
|
|
+def calculate_wing_shuffle(grid_data3):
|
|
|
|
+ fixtures = []
|
|
|
|
+ for i,f in enumerate(grid_data3):
|
|
|
|
+ print("WING",i,f)
|
|
|
|
+ fix = f["FIX"]
|
|
|
|
+ if fix not in fixtures:
|
|
|
|
+ fixtures.append(fix)
|
|
|
|
+ fx_prm={}
|
|
|
|
+ fx_prm["SHUFFLE"] = 1
|
|
|
|
+ fx_prm["WING"] = 2
|
|
|
|
+ if len(grid_data3) <= 0:
|
|
|
|
+ cprint("calculate_wing_shuffle no grid_data3 !")
|
|
|
|
+ return
|
|
|
|
+ print()
|
|
|
|
+ print(grid_data3[0])
|
|
|
|
+ fx_prm["WING"] = int(grid_data3[0]["FX2"]["WING"])
|
|
|
|
+ fx_prm["SHUFFLE"] = int(grid_data3[0]["FX2"]["SHUFFLE"])
|
|
|
|
+
|
|
|
|
+ a=fxlib.process_wings(fixtures,fx_prm)
|
|
|
|
+ print(a)
|
|
|
|
+ return a
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def grid_stop(grid_data1):
|
|
|
|
+ if not grid_data1:
|
|
|
|
+ return
|
|
|
|
+ for v in grid_data1:
|
|
|
|
+ v["SPEED"] = 0
|
|
|
|
+ print("grid_stop",v)
|
|
|
|
+def grid_off(grid_data1):
|
|
|
|
+ if not grid_data1:
|
|
|
|
+ return
|
|
|
|
+ for v in grid_data1:
|
|
|
|
+ v["SIZE"] = 0
|
|
|
|
+ print("grid_off",v)
|
|
|
|
+
|
|
class tk_event_fx():
|
|
class tk_event_fx():
|
|
""" global input event Handeler for short cut's ... etc
|
|
""" global input event Handeler for short cut's ... etc
|
|
"""
|
|
"""
|
|
@@ -257,13 +322,20 @@ class tk_event_fx():
|
|
ct = ""
|
|
ct = ""
|
|
#print(" --", self.attr)
|
|
#print(" --", self.attr)
|
|
fx3_grid = MAIN.meta.fx3_grid # OptionBuffer()
|
|
fx3_grid = MAIN.meta.fx3_grid # OptionBuffer()
|
|
- if self.attr == "START":
|
|
|
|
|
|
+ if self.attr in ["START","STOP","OFF"]:
|
|
grid_data1 = get_fx3_grid()
|
|
grid_data1 = get_fx3_grid()
|
|
|
|
+ #if self.attr in ["STOP"]:
|
|
|
|
+ # grid_stop(grid_data1)
|
|
|
|
+ if self.attr in ["OFF"]:
|
|
|
|
+ grid_off(grid_data1)
|
|
|
|
+
|
|
|
|
+
|
|
grid_data2 = reshape_grid_to_jdata(grid_data1)
|
|
grid_data2 = reshape_grid_to_jdata(grid_data1)
|
|
programmer = mc_api.get_programmer()
|
|
programmer = mc_api.get_programmer()
|
|
grid_data3 = merge_grid_and_programmer(programmer,grid_data2)
|
|
grid_data3 = merge_grid_and_programmer(programmer,grid_data2)
|
|
|
|
|
|
- calculate_offset(grid_data3)
|
|
|
|
|
|
+ wing = calculate_wing_shuffle(grid_data3)
|
|
|
|
+ calculate_offset(grid_data3,wing)
|
|
correct_base(grid_data3)
|
|
correct_base(grid_data3)
|
|
update_dmx_adresses(grid_data3)
|
|
update_dmx_adresses(grid_data3)
|
|
|
|
|
|
@@ -416,6 +488,11 @@ def motion(code="circle"):
|
|
k = "BASE:2"
|
|
k = "BASE:2"
|
|
MAIN.meta.fx3_grid[k].val(0)
|
|
MAIN.meta.fx3_grid[k].val(0)
|
|
|
|
|
|
|
|
+
|
|
|
|
+ for i in range(1,5+1):
|
|
|
|
+ k = "START:"+str(i)
|
|
|
|
+ MAIN.meta.fx3_grid[k].val(0)
|
|
|
|
+
|
|
if code == "circle":
|
|
if code == "circle":
|
|
|
|
|
|
k = "SIZE:1"
|
|
k = "SIZE:1"
|
|
@@ -446,8 +523,13 @@ def motion(code="circle"):
|
|
k = "SIZE:3"
|
|
k = "SIZE:3"
|
|
MAIN.meta.fx3_grid[k].val(100)
|
|
MAIN.meta.fx3_grid[k].val(100)
|
|
|
|
|
|
- k = "TYPE:3"
|
|
|
|
|
|
+ k = "START:2"
|
|
|
|
+ MAIN.meta.fx3_grid[k].val(20)
|
|
|
|
+
|
|
|
|
+ k = "TYPE:2"
|
|
MAIN.meta.fx3_grid[k].val("ramp")
|
|
MAIN.meta.fx3_grid[k].val("ramp")
|
|
|
|
+ k = "TYPE:3"
|
|
|
|
+ MAIN.meta.fx3_grid[k].val("on")
|
|
|
|
|
|
k = "GRP:3"
|
|
k = "GRP:3"
|
|
MAIN.meta.fx3_grid[k].val("BEAM")
|
|
MAIN.meta.fx3_grid[k].val("BEAM")
|
|
@@ -456,7 +538,9 @@ def motion(code="circle"):
|
|
MAIN.meta.fx3_grid[k].val("DIM")
|
|
MAIN.meta.fx3_grid[k].val("DIM")
|
|
|
|
|
|
k = "WIDTH:3"
|
|
k = "WIDTH:3"
|
|
- MAIN.meta.fx3_grid[k].val(50)
|
|
|
|
|
|
+ MAIN.meta.fx3_grid[k].val(85)
|
|
|
|
+ k = "BASE:3"
|
|
|
|
+ MAIN.meta.fx3_grid[k].val(-1)
|
|
|
|
|
|
if code == "street":
|
|
if code == "street":
|
|
k = "SIZE:1"
|
|
k = "SIZE:1"
|
|
@@ -466,8 +550,13 @@ def motion(code="circle"):
|
|
k = "SIZE:3"
|
|
k = "SIZE:3"
|
|
MAIN.meta.fx3_grid[k].val(100)
|
|
MAIN.meta.fx3_grid[k].val(100)
|
|
|
|
|
|
- k = "TYPE:3"
|
|
|
|
|
|
+ k = "START:1"
|
|
|
|
+ MAIN.meta.fx3_grid[k].val(20)
|
|
|
|
+
|
|
|
|
+ k = "TYPE:1"
|
|
MAIN.meta.fx3_grid[k].val("ramp")
|
|
MAIN.meta.fx3_grid[k].val("ramp")
|
|
|
|
+ k = "TYPE:3"
|
|
|
|
+ MAIN.meta.fx3_grid[k].val("on")
|
|
|
|
|
|
k = "GRP:3"
|
|
k = "GRP:3"
|
|
MAIN.meta.fx3_grid[k].val("BEAM")
|
|
MAIN.meta.fx3_grid[k].val("BEAM")
|
|
@@ -476,7 +565,9 @@ def motion(code="circle"):
|
|
MAIN.meta.fx3_grid[k].val("DIM")
|
|
MAIN.meta.fx3_grid[k].val("DIM")
|
|
|
|
|
|
k = "WIDTH:3"
|
|
k = "WIDTH:3"
|
|
- MAIN.meta.fx3_grid[k].val(50)
|
|
|
|
|
|
+ MAIN.meta.fx3_grid[k].val(85)
|
|
|
|
+ k = "BASE:3"
|
|
|
|
+ MAIN.meta.fx3_grid[k].val(-1)
|
|
|
|
|
|
|
|
|
|
def size(val=255):
|
|
def size(val=255):
|
|
@@ -485,7 +576,9 @@ def size(val=255):
|
|
kt = "TYPE:{}".format(i+1)
|
|
kt = "TYPE:{}".format(i+1)
|
|
print(" ",k,val)
|
|
print(" ",k,val)
|
|
if MAIN.meta.fx3_grid[kt].val() not in ["STATIC","-"]:
|
|
if MAIN.meta.fx3_grid[kt].val() not in ["STATIC","-"]:
|
|
- MAIN.meta.fx3_grid[k].val(val)
|
|
|
|
|
|
+ v = MAIN.meta.fx3_grid[k].val()
|
|
|
|
+ if v not in [0,0.0]:
|
|
|
|
+ MAIN.meta.fx3_grid[k].val(val)
|
|
refresh_fx3_elem(_filter="SIZE")
|
|
refresh_fx3_elem(_filter="SIZE")
|
|
|
|
|
|
def speed(val=255):
|
|
def speed(val=255):
|
|
@@ -732,7 +825,8 @@ def _draw_fx3(frame,c,r,gui,mode="FX"):
|
|
b["text"] = comm
|
|
b["text"] = comm
|
|
b["bg"] = "#ffbf00"
|
|
b["bg"] = "#ffbf00"
|
|
|
|
|
|
- if comm in ["SHUFFLE:","WING:","BASE:","INVERT:","DIR:","START:","STOP","OFF"]: # not implemented !
|
|
|
|
|
|
+ #if comm in ["SHUFFLE:","WING:","BASE:","INVERT:","DIR:","START:","STOP","OFF"]: # not implemented !
|
|
|
|
+ if comm in ["INVERT:","STOP","DIR:","WING:"]: # not implemented !
|
|
b["fg"] = "#aaa"
|
|
b["fg"] = "#aaa"
|
|
b.config(activebackground="#aaa")
|
|
b.config(activebackground="#aaa")
|
|
#b.config(activebackground="#bbb")
|
|
#b.config(activebackground="#bbb")
|
|
@@ -989,12 +1083,13 @@ if "--test" in sys.argv:
|
|
time.sleep(1)
|
|
time.sleep(1)
|
|
|
|
|
|
for i in range(1,10):
|
|
for i in range(1,10):
|
|
- for attr in ["RED","BLUE","GREEN","PAN","TILT","DIM"]:
|
|
|
|
|
|
+ for attr in ["RED","BLUE","GREEN"]: #,"PAN","TILT","DIM"]:
|
|
msg = [{'event': 'FIXTURES', 'TYPE': 'ENCODERS', 'FIX': str(3000+i), 'VAL': 'click', 'ATTR': attr}]
|
|
msg = [{'event': 'FIXTURES', 'TYPE': 'ENCODERS', 'FIX': str(3000+i), 'VAL': 'click', 'ATTR': attr}]
|
|
msg=json.dumps(msg).encode("utf-8")
|
|
msg=json.dumps(msg).encode("utf-8")
|
|
|
|
+ print(msg)
|
|
cmd_client.send(msg)
|
|
cmd_client.send(msg)
|
|
|
|
|
|
-
|
|
|
|
|
|
+ #exit()
|
|
mode = "FX-MAIN"
|
|
mode = "FX-MAIN"
|
|
attr="FX OFF"
|
|
attr="FX OFF"
|
|
cb0 = tk_event_fx(fix=0,elem=None,attr=attr,data=gui,mode=mode).cb
|
|
cb0 = tk_event_fx(fix=0,elem=None,attr=attr,data=gui,mode=mode).cb
|