2 Commits ebac1db79d ... 3620e6f40f

Author SHA1 Message Date
  micha 3620e6f40f fix: FX3 color default and add DIM 1 month ago
  micha cb174f003a cleanup FX3 offset calculation 1 month ago
3 changed files with 165 additions and 119 deletions
  1. 2 1
      _LibreLightDesk.py
  2. 1 1
      lib/meta.py
  3. 162 117
      tkgui/FX3.py

+ 2 - 1
_LibreLightDesk.py

@@ -394,10 +394,11 @@ class MC_PATCH():
                 
                 index_patch = []
                 for fix,val in FIXTURES.fixtures.items():
-                    print("FIX",fix,val)
+                    #print("FIX",fix,val)
                     val = json.dumps(val).encode() 
                     self.mc.set("PATCH-"+str(fix),val)
                     index_patch.append(fix)
+
                 val = json.dumps(index_patch).encode() 
                 self.mc.set("PATCH-INDEX",val)
             except Exception as e:

+ 1 - 1
lib/meta.py

@@ -401,7 +401,7 @@ def change_grp(name,val):
 fx3.labels.extend([" "," "," "," "," ","\n"])
 fx3.labels.extend(["\n"])
 fx3.labels.extend([" ","START","STOP","OFF"," ","\n"])
-fx3.labels.extend(["  ","CIRCLE","PAN","TILT","FLAY","\n"])
+fx3.labels.extend(["DIM","CIRCLE","PAN","TILT","FLAY","\n"])
 fx3.labels.extend([" ","RED","GREEN","BLUE","MAGENTA","\n"])
 fx3.labels.extend(["SIZE:","MINI","SMALL","NORMAL","BIG","\n"])
 fx3.labels.extend(["SPEED:","SLOW","MID","FAST","TURBO","\n"])

+ 162 - 117
tkgui/FX3.py

@@ -152,7 +152,6 @@ def update_dmx_adresses(grid_data2):
     patch = get_patch() 
     patch = patch_order_by_fix(patch)
     out=[]
-    offset = 0
     for i in grid_data2:
         ID = i["FIX"]
         attr = i["ATTR"]
@@ -171,30 +170,66 @@ def update_dmx_adresses(grid_data2):
         #cprint("333-- FX3:",i,color="yellow")
     return grid_data2
 
-def calculate_offset():
-    pass
+def extract_fixture_list(grid_data3):
+    print()
+    out = {}
+    for k,v in enumerate(grid_data3):
+        print("calc_off",k,v)
+        if v["FIX"] not in out:
+            out[v["FIX"]] = 0
+        else:
+            out[v["FIX"]] += 1
+    return out
+
+def correct_base(grid_data3):
+    for k,v in enumerate(grid_data3):
+        print("BASE:",[k,v])
+        if type(v["FX2"]["BASE"]) not in [int,float]:
+            continue
+
+        if v["FX2"]["BASE"] < 0:
+            v["FX2"]["BASE"] = "-"
+        elif v["FX2"]["BASE"] > 0:
+            v["FX2"]["BASE"] = "+"
+        else:
+            v["FX2"]["BASE"] = "0"
+
+def calculate_offset(grid_data3):
+    fix = extract_fixture_list(grid_data3)
+    offset = {}
+    offset_len = len(fix)-1
+
+    print()
+    for i,f in enumerate(fix):
+
+        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
+
+            nof = round( offset[attr]*i,2 ) # ID
+            v["FX2"]["OFFSET"] = nof
+            print("x_offset: ",k,v["FIX"],v["ATTR"],offset,nof)
 
 def merge_grid_and_programmer(programmer,grid_data2):
     out=[]
-    offset = {}
-    offset_len = len(programmer)
 
     for k,v in enumerate(programmer):
         attr = v["ATTR"]
         ID = v["ID"]
-        if attr not in offset:
-            offset[attr] = 0
         print("v",v)
-        _offset = 0
         if attr in grid_data2:
             tmp = copy.deepcopy(grid_data2[attr])
-            print(" ",tmp,_offset,offset_len)
+            print(" ",tmp)
             _offset = tmp["FX2"]["OFFSET"]
             tmp["ATTR"] = attr
             tmp["FIX"] = ID
-            tmp["FX2"]["OFFSET"] = round( offset[attr],2 ) # ID
             out.append(tmp)
-            offset[attr] +=  _offset/offset_len
     return out
 
 def log(x,name="log",color="yellow"):
@@ -230,16 +265,19 @@ class tk_event_fx():
             FIX=3001
 
             grid_data2 = reshape_grid_to_jdata(grid_data1)
-            log(grid_data2,name="0:")
+            #log(grid_data2,name="0:")
 
             programmer=get_programmer()
-            log(programmer,name="A:")
+            #log(programmer,name="A:")
             
             grid_data3 = merge_grid_and_programmer(programmer,grid_data2)
-            log(grid_data3,name="B:")
+            #log(grid_data3,name="B:")
+
+            calculate_offset(grid_data3)
+            correct_base(grid_data3)
 
             out = update_dmx_adresses(grid_data3)
-            log(out,name="C:")
+            #log(out,name="C:")
 
             msg=json.dumps(out).encode("utf-8")
             cprint("SEND FX3:",color="green")
@@ -339,6 +377,10 @@ def motion(code="circle"):
     k = "GRP:3" #.format(i+1)
     MAIN.meta.fx3_grid[k].val(" ")
     MAIN.meta.change_grp(name=k,val=" ")
+    k = "GRP:4" #.format(i+1)
+    MAIN.meta.fx3_grid[k].val(" ")
+    MAIN.meta.change_grp(name=k,val=" ")
+    
     
     k = "ATTR:1" #.format(i+1)
     MAIN.meta.fx3_grid[k].val("PAN")
@@ -346,76 +388,46 @@ def motion(code="circle"):
     MAIN.meta.fx3_grid[k].val("TILT")
     k = "ATTR:3" #.format(i+1)
     MAIN.meta.fx3_grid[k].val(" ")
+    k = "ATTR:4" #.format(i+1)
+    MAIN.meta.fx3_grid[k].val(" ")
+
+    k = "TYPE:1" 
+    MAIN.meta.fx3_grid[k].val("sinus")
+    k = "TYPE:2" 
+    MAIN.meta.fx3_grid[k].val("cosinus")
+
+    k = "WIDTH:1" 
+    MAIN.meta.fx3_grid[k].val(255)
+    k = "WIDTH:2" 
+    MAIN.meta.fx3_grid[k].val(255)
+    
+    k = "BASE:1" 
+    MAIN.meta.fx3_grid[k].val(0)
+    k = "BASE:2" 
+    MAIN.meta.fx3_grid[k].val(0)
 
     if code == "circle":
-        k = "TYPE:1" 
-        MAIN.meta.fx3_grid[k].val("sinus")
-        k = "TYPE:2" 
-        MAIN.meta.fx3_grid[k].val("cosinus")
 
         k = "SIZE:1" 
         MAIN.meta.fx3_grid[k].val(100)
         k = "SIZE:2" 
         MAIN.meta.fx3_grid[k].val(100)
 
-        k = "BASE:1" 
-        MAIN.meta.fx3_grid[k].val(0)
-        k = "BASE:2" 
-        MAIN.meta.fx3_grid[k].val(0)
-
-        k = "WIDTH:1" 
-        MAIN.meta.fx3_grid[k].val(255)
-        k = "WIDTH:2" 
-        MAIN.meta.fx3_grid[k].val(255)
 
     if code == "pan":
-        k = "TYPE:1" 
-        MAIN.meta.fx3_grid[k].val("sinus")
-        k = "TYPE:2" 
-        MAIN.meta.fx3_grid[k].val("cosinus")
-        k = "TYPE:3" 
-        MAIN.meta.fx3_grid[k].val("-")
-        k = "TYPE:4" 
-        MAIN.meta.fx3_grid[k].val("-")
 
         k = "SIZE:1" 
         MAIN.meta.fx3_grid[k].val(100)
         k = "SIZE:2" 
         MAIN.meta.fx3_grid[k].val(0)
 
-        k = "BASE:1" 
-        MAIN.meta.fx3_grid[k].val(0)
-        k = "BASE:2" 
-        MAIN.meta.fx3_grid[k].val(0)
-
-        k = "WIDTH:1" 
-        MAIN.meta.fx3_grid[k].val(255)
-        k = "WIDTH:2" 
-        MAIN.meta.fx3_grid[k].val(255)
     if code == "tilt":
-        k = "TYPE:1" 
-        MAIN.meta.fx3_grid[k].val("sinus")
-        k = "TYPE:2" 
-        MAIN.meta.fx3_grid[k].val("cosinus")
-        k = "TYPE:3" 
-        MAIN.meta.fx3_grid[k].val("-")
-        k = "TYPE:4" 
-        MAIN.meta.fx3_grid[k].val("-")
 
         k = "SIZE:1" 
         MAIN.meta.fx3_grid[k].val(0)
         k = "SIZE:2" 
         MAIN.meta.fx3_grid[k].val(100)
 
-        k = "BASE:1" 
-        MAIN.meta.fx3_grid[k].val(0)
-        k = "BASE:2" 
-        MAIN.meta.fx3_grid[k].val(0)
-
-        k = "WIDTH:1" 
-        MAIN.meta.fx3_grid[k].val(255)
-        k = "WIDTH:2" 
-        MAIN.meta.fx3_grid[k].val(255)
 
 def size(val=255):
     for i in range(4):
@@ -435,17 +447,40 @@ def speed(val=255):
             MAIN.meta.fx3_grid[k].val(val)
     __refresh_fx3(_filter="SPEED")
 
+def dim(code="dim"):
+
+    for i in range(1,4+1):
+        k = "GRP:" +str(i)
+        MAIN.meta.change_grp(name=k,val="BEAM")
+        MAIN.meta.fx3_grid[k].val("BEAM")
+        k = "ATTR:"+str(i) 
+        MAIN.meta.fx3_grid[k].val(" ")
+
+        k = "TYPE:"+str(i) 
+        MAIN.meta.fx3_grid[k].val("static")
+        k = "WIDTH:"+str(i) 
+        MAIN.meta.fx3_grid[k].val(50)
+        k = "BASE:"+str(i) 
+        MAIN.meta.fx3_grid[k].val(-1)
+        k = "SIZE:"+str(i) 
+        MAIN.meta.fx3_grid[k].val(0)
+
+    k = "ATTR:1"
+    MAIN.meta.fx3_grid[k].val("DIM")
+
+
+    if code == "dim":
+        k = "TYPE:1" 
+        MAIN.meta.fx3_grid[k].val("fade")
+        k = "SIZE:1" 
+        MAIN.meta.fx3_grid[k].val(255)
+
 def rgb(code="red"):
     #basic()
-    k = "GRP:1" 
-    MAIN.meta.change_grp(name=k,val="RGB")
-    MAIN.meta.fx3_grid[k].val("RGB")
-    k = "GRP:2" 
-    MAIN.meta.change_grp(name=k,val="RGB")
-    MAIN.meta.fx3_grid[k].val("RGB")
-    k = "GRP:3" 
-    MAIN.meta.change_grp(name=k,val="RGB")
-    MAIN.meta.fx3_grid[k].val("RGB")
+    for i in range(1,4+1):
+        k = "GRP:" +str(i)
+        MAIN.meta.change_grp(name=k,val="RGB")
+        MAIN.meta.fx3_grid[k].val("RGB")
 
     k = "ATTR:1"
     MAIN.meta.fx3_grid[k].val("RED")
@@ -453,63 +488,56 @@ def rgb(code="red"):
     MAIN.meta.fx3_grid[k].val("GREEN")
     k = "ATTR:3" 
     MAIN.meta.fx3_grid[k].val("BLUE")
-
-    k = "TYPE:1" 
-    MAIN.meta.fx3_grid[k].val("STATIC") #"255")
-    k = "TYPE:2" 
-    MAIN.meta.fx3_grid[k].val("STATIC") #255")
-    k = "TYPE:3" 
-    MAIN.meta.fx3_grid[k].val("STATIC") #255")
-    k = "TYPE:4" 
-    MAIN.meta.fx3_grid[k].val("STATIC") #255")
-
-    k = "BASE:1" 
-    MAIN.meta.fx3_grid[k].val(-1)
-    k = "BASE:2" 
-    MAIN.meta.fx3_grid[k].val(-1)
-    k = "BASE:3" 
-    MAIN.meta.fx3_grid[k].val(-1)
+    k = "ATTR:4" 
+    MAIN.meta.fx3_grid[k].val("WHITE")
+
+    for i in range(1,4+1):
+        k = "TYPE:"+str(i) 
+        MAIN.meta.fx3_grid[k].val("static")
+        k = "WIDTH:"+str(i) 
+        MAIN.meta.fx3_grid[k].val(50)
+        k = "BASE:"+str(i) 
+        MAIN.meta.fx3_grid[k].val(-1)
+        k = "SIZE:"+str(i) 
+        MAIN.meta.fx3_grid[k].val(0)
 
     if code == "red":
         k = "TYPE:1" 
         MAIN.meta.fx3_grid[k].val("fade")
+        k = "SIZE:1" 
+        MAIN.meta.fx3_grid[k].val(255)
     if code == "green":
         k = "TYPE:2" 
         MAIN.meta.fx3_grid[k].val("fade")
+        k = "SIZE:2" 
+        MAIN.meta.fx3_grid[k].val(255)
     if code == "blue":
         k = "TYPE:3" 
         MAIN.meta.fx3_grid[k].val("fade")
-    if code == "blue":
-        k = "TYPE:3" 
+        k = "SIZE:3" 
+        MAIN.meta.fx3_grid[k].val(255)
+    if code == "magenta":
+        k = "TYPE:1" 
         MAIN.meta.fx3_grid[k].val("fade")
-    if code == "blue":
         k = "TYPE:3" 
         MAIN.meta.fx3_grid[k].val("fade")
+        k = "SIZE:1" 
+        MAIN.meta.fx3_grid[k].val(255)
+        k = "SIZE:3" 
+        MAIN.meta.fx3_grid[k].val(255)
 
     __refresh_fx3()
 
 def clear():
     basic()
-    k = "GRP:1" 
-    MAIN.meta.fx3_grid[k].val(" ")
-    k = "GRP:2" 
-    MAIN.meta.fx3_grid[k].val(" ")
-    k = "GRP:3" 
-    MAIN.meta.fx3_grid[k].val(" ")
-
-    k = "ATTR:1"
-    MAIN.meta.fx3_grid[k].val(" ")
-    k = "ATTR:2"
-    MAIN.meta.fx3_grid[k].val(" ")
-    k = "ATTR:3" 
-    MAIN.meta.fx3_grid[k].val(" ")
 
-    k = "TYPE:1" 
-    MAIN.meta.fx3_grid[k].val(" ")
-    k = "TYPE:2" 
-    MAIN.meta.fx3_grid[k].val(" ")
-    k = "TYPE:3" 
-    MAIN.meta.fx3_grid[k].val(" ")
+    for i in range(1,4+1):
+        k = "GRP:"+str(i) 
+        MAIN.meta.fx3_grid[k].val(" ")
+        k = "ATTR:"+str(i) 
+        MAIN.meta.fx3_grid[k].val(" ")
+        k = "TYPE:"+str(i) 
+        MAIN.meta.fx3_grid[k].val(" ")
 
 
 motion("circle")
@@ -595,28 +623,32 @@ def _draw_fx3(frame,c,r,gui,mode="FX"):
                     motion("pan")
                 elif xcomm == "TILT":
                     motion("tilt")
+                elif xcomm == "DIM":
+                    dim(code="dim")
                 elif xcomm == "RED":
                     rgb("red")
                 elif xcomm == "GREEN":
                     rgb("green")
                 elif xcomm == "BLUE":
                     rgb("blue")
+                elif xcomm == "MAGENTA":
+                    rgb("magenta")
                 elif xcomm == "MINI":
-                    size(10)
-                elif xcomm == "SMALL":
                     size(25)
-                elif xcomm == "NORMAL":
+                elif xcomm == "SMALL":
                     size(50)
-                elif xcomm == "BIG":
+                elif xcomm == "NORMAL":
                     size(100)
+                elif xcomm == "BIG":
+                    size(255)
                 elif xcomm == "SLOW":
                     speed(5)
                 elif xcomm == "MID":
                     speed(25)
                 elif xcomm == "FAST":
-                    speed(100)
+                    speed(80)
                 elif xcomm == "TURBO":
-                    speed(200)
+                    speed(160)
 
                 xcb(event) #,data)
             return XXX
@@ -636,6 +668,17 @@ def _draw_fx3(frame,c,r,gui,mode="FX"):
             b["text"] = comm
             b["bg"] = "#ffbf00"
 
+        if comm in ["SHUFFLE:","WING:","BASE:","START:","STOP","OFF"]:  # not implemented !
+            b["fg"] = "#aaa"
+            b.config(activebackground="#aaa")
+            #b.config(activebackground="#bbb")
+
+        if comm in ["SIZE:","WIDTH:","DIR:","WING:","ATTR:","TYPE:","SPEED:","OFFSET:"]: # OK
+            b["bg"] = "#bbb"
+            b.config(activebackground="#bbb")
+            b.config(activeforeground="#bbb")
+                    #activeForeground
+
         if comm == "START": 
             b["bg"] = "orange"
             b.config(activebackground="#dd0")
@@ -648,8 +691,10 @@ def _draw_fx3(frame,c,r,gui,mode="FX"):
             print("3>",[comm,fx_func,v])
             b["text"] = v
             if comm.startswith("TYPE:"): 
-                b["bg"] = "orange"
-                b.config(activebackground="#dd0")
+                #b["bg"] = "orange"
+                #b.config(activebackground="#dd0")
+                b["bg"] = "lightgreen"
+                b.config(activebackground="#0d0")
 
             for a in ["SPEED:","SIZE:","START:","OFFSET:"]:
                 if comm.startswith(a):