ソースを参照

cleanup FX3 and add fx-offset

micha 3 ヶ月 前
コミット
ebac1db79d
1 ファイル変更102 行追加45 行削除
  1. 102 45
      tkgui/FX3.py

+ 102 - 45
tkgui/FX3.py

@@ -120,6 +120,92 @@ def basic():
         MAIN.meta.fx3_grid[k].data["min"] = -1
 basic()
 
+def get_fx3_grid():
+    fx3_grid = MAIN.meta.fx3_grid # OptionBuffer()
+    out = []
+    for k,v in fx3_grid.items(): # re-order fx3_grid to command
+        vv = v.val()
+        kk,ii = k.split(":")
+        ii = int(ii)-1
+        if len(out) <= ii: #extand list
+            out.append({}) 
+        out[ii][kk] = vv 
+    return out
+
+def reshape_grid_to_jdata(grid_data1):
+    grid_data2 = {}
+    for i in grid_data1: 
+        attr = i["ATTR"].strip()
+        if attr:
+            grid_data2[attr] = {"event":"FX3","MODE":"FX","DMX":-11,"DMX-FINE":-99,"FIX":"","ATTR":"","VALUE":None,"FX2":i} 
+    return grid_data2
+
+def patch_order_by_fix(patch):
+    out={}
+    for p in patch:
+        ID = p["FIX"]
+        out[ID] = p
+        #print("patch_order",[ID,p])
+    return out
+
+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"]
+        #print("address",[ID,attr,i,ID in patch])
+        if ID in patch:
+            v = patch[ID]
+            if attr in v["ATTR"]:
+                dmx = v["ATTR"][attr]
+                i["DMX"]=dmx
+
+            attr += "-FINE"
+            if attr in v["ATTR"]:
+                dmx = v["ATTR"][attr]
+                i["DMX-FINE"]=dmx
+
+        #cprint("333-- FX3:",i,color="yellow")
+    return grid_data2
+
+def calculate_offset():
+    pass
+
+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)
+            _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"):
+    print()
+    if type(x) in [dict]: #,OrderedDict]:
+        for k,v in x.items():
+            cprint(name,[k,v],color=color)
+    else:
+        for k,v in enumerate(x):
+            cprint(name,[k,v],color=color)
+
 class tk_event_fx():
     """ global input event Handeler for short cut's ... etc
     """
@@ -138,56 +224,27 @@ class tk_event_fx():
         fx3_grid = MAIN.meta.fx3_grid # OptionBuffer()
         if self.attr == "START":
 
-            _fx3_jdata = []
-            for k,v in fx3_grid.items(): # re-order fx3_grid to command
-                vv = v.val()
-                kk,ii = k.split(":")
-                ii = int(ii)-1
-                if len(_fx3_jdata) <= ii: #extand list
-                    _fx3_jdata.append({}) 
-                _fx3_jdata[ii][kk] = vv 
+            grid_data1 = get_fx3_grid()
+
             out = []
             FIX=3001
-            z=0
-
-            xxxyyy = {}
-            for i in _fx3_jdata: #info
-                #i["event"] = "FX3"
-                attr = i["ATTR"].strip()
-                if attr:
-                    #out.append( 
-                    xxxyyy[attr] = {"event":"FX3","MODE":"FX","DMX":176+z,"DMX-FINE":-199,"FIX":"","ATTR":"","VALUE":None,"FX2":i} 
-
-                #print(i)
-                z+=1
-            
-            patch = get_patch()
+
+            grid_data2 = reshape_grid_to_jdata(grid_data1)
+            log(grid_data2,name="0:")
+
             programmer=get_programmer()
-            out=[]
-            z=106
-            for k,v in enumerate(programmer):
-                attr = v["ATTR"]
-                if attr in xxxyyy:
-                    tmp = copy.deepcopy(xxxyyy[attr])
-                    tmp["ATTR"] = attr
-                    ID = v["ID"]
-                    tmp["FIX"] = ID
-                    tmp["DMX"] = 0
-                    for p in patch:
-                        print(p)
-                        if ID == p["FIX"]:
-                            if attr in p["ATTR"]:
-                                tmp["DMX"]=p["ATTR"][attr]-1
-                    out.append(tmp)
-                    cprint("432 FX3:",xxxyyy[attr],color="yellow")
-                    z+=1
+            log(programmer,name="A:")
+            
+            grid_data3 = merge_grid_and_programmer(programmer,grid_data2)
+            log(grid_data3,name="B:")
+
+            out = update_dmx_adresses(grid_data3)
+            log(out,name="C:")
 
             msg=json.dumps(out).encode("utf-8")
             cprint("SEND FX3:",color="green")
             for i in out:
                 cprint(" ", i,color="green")
-                #msg=json.dumps([i]).encode("utf-8")
-                #jsend(msg)
             #cmd_client.send(msg)
             jsend(msg)
 
@@ -859,7 +916,7 @@ def get_programmer():
                 #print(":",k,v,kk,vv)
                 #print(k,v,v["NAME"],kk,vv)
                 tmp={"ID":k,"NAME":v["NAME"],"ATTR":kk,"NR":vv["NR"]} #,"FX3":vv["FX2"]}
-                print("tmp",tmp)
+                print("get_programmer:",tmp)
                 out.append(tmp)
                 ok=1
         if ok:
@@ -892,10 +949,10 @@ def get_patch():
             if a.startswith("_"):
                 continue
             nr = nr + d + u*512
-            attr[a] = nr
+            attr[a] = nr-1
         tmp = {"FIX":v,"UNI":u,"DMX":d,"NR":nr,"ATTR":attr}
         out.append(tmp )
-        print(tmp)
+        #print("get_patch",tmp)
     
     return out