瀏覽代碼

fixing: flash fx,fade OK

micha 3 年之前
父節點
當前提交
e69125de2e
共有 3 個文件被更改,包括 97 次插入40 次删除
  1. 69 25
      Editor3.py
  2. 25 12
      console.py
  3. 3 3
      show/GloryCamp2021/presets.sav

+ 69 - 25
Editor3.py

@@ -33,14 +33,21 @@ from tkinter import font
 import lib.chat as chat
 import lib.motion as motion
 
-root = tk.Tk()
-root["bg"] = "grey" #white
-root.title( __file__)
+Xroot = tk.Tk()
+Xroot["bg"] = "grey" #white
+Xroot.title( __file__)
+
+
+root = tk.Frame(Xroot,bg="black",width="100px")
+root.pack(fill=tk.BOTH, side=tk.LEFT)
+root2 = tk.Frame(Xroot,bg="blue",width="100px")
+root2.pack(fill=tk.BOTH, side=tk.LEFT)
+
 #default_font = font.Font(family='Helvetica', size=12, weight='bold')
 Font = font.Font(family='Helvetica', size=9, weight='normal')
 FontBold = font.Font(family='Helvetica', size=9, weight='bold')
 #default_font.configure(size=9)
-root.option_add("*Font", Font)
+Xroot.option_add("*Font", Font)
 
 
 from collections import OrderedDict
@@ -54,30 +61,38 @@ groups  = OrderedDict()
 
 BLIND = 0
 STORE = 0
+FLUSH = 0
 POS   = ["PAN","TILT","MOTION"]
 COLOR = ["RED","GREEN","BLUE","COLOR"]
 BEAM  = ["GOBO","G-ROT","PRISMA","P-ROT","FOCUS","SPEED"]
 INT   = ["DIM","SHUTTER","STROBE","FUNC"]
 client = chat.tcp_sender()
 
-fade = 1
-def build_cmd(dmx,val,args=[fade]):
+fade = 1.13
+def build_cmd(dmx,val,args=[fade],flush=0):
     cmd=""
+    if flush:
+        pfx ="df"
+    else:
+        pfx ="d"
     if type(val) is float or type(val) is int:
-        cmd += ",d{}:{:0.4f}".format(dmx,val)
+        cmd += ",{}{}:{:0.4f}".format(pfx,dmx,val)
     else:
-        cmd += ",d{}:{}".format(dmx,val)
-    
-    for val in args:
-        if type(val) is float or type(val) is int:
-            cmd += ":{:0.4f}".format(val)
-        else:
-            cmd += ":{}".format(val)
+        cmd += ",{}{}:{}".format(pfx,dmx,val)
+   
+    if FLUSH:
+        cmd += ":0:0"#.format(val)
+    else:
+        for val in args:
+            if type(val) is float or type(val) is int:
+                cmd += ":{:0.4f}".format(val)
+            else:
+                cmd += ":{}".format(val)
 
     return cmd
 
 
-def update_dmx(attr,data):
+def update_dmx(attr,data,value=None,flush=0):
     global BLIND
     dmx = data["DMX"]
     val = None
@@ -95,7 +110,9 @@ def update_dmx(attr,data):
             if val is not None:            
                 
                 #cmd += ",d{}:{:0.4f}".format(dmx,int(val))
-                cmd += build_cmd(dmx,val)
+                if value is not None:
+                    val = value
+                cmd += build_cmd(dmx,val,flush=flush)
                 #print("cmd",cmd)
                 
         
@@ -107,7 +124,9 @@ def update_dmx(attr,data):
                 val = val * (data["ATTRIBUT"]["VDIM"]["VALUE"] / 255.)
         if val is not None:            
             #cmd += ",d{}:{}".format(dmx,int(val))
-            cmd += build_cmd(dmx,val)
+            if value is not None:
+                val = value
+            cmd += build_cmd(dmx,val,flush=flush)
             #print("cmd",cmd)
 
     if not BLIND:
@@ -159,7 +178,7 @@ class Xevent():
             #v2 = v
             #v = data["ATTRIBUT"][attr]["VALUE"]
             data["ATTRIBUT"][attr]["VALUE"] = v2
-            elem["text"] = "{} {:0.4f}".format(attr,v2)
+            elem["text"] = "{} {:0.2f}".format(attr,v2)
             #worker.fade_dmx(fix,attr,data,v,v2,ft=0)
             
             cmd=update_dmx(attr=attr,data=data)
@@ -173,11 +192,12 @@ class Xevent():
     def cb(self,event):
         #print("cb",self,event,data)
         print("cb",self.attr,self.mode,event)
-        #print(self.obj.keys())
+        print(dir(event),[str(event.type)])#.keys())
         try:
             #v = self.data["ATTRIBUT"][self.attr]
             global STORE
             global BLIND
+            global FLUSH
             change = 0
             
             if self.mode == "COMMAND":
@@ -203,6 +223,19 @@ class Xevent():
                                 #print(data["ATTRIBUT"])
 
                         
+                elif self.attr == "FX OFF":
+                    if event.num == 1:
+                        client.send("fx0:alloff:,fxf:alloff:")
+                        self.data.elem_commands[self.attr]["bg"] = "magenta"
+
+                elif self.attr == "FLUSH":
+                    if event.num == 1:
+                        if FLUSH:
+                            FLUSH = 0
+                            self.data.elem_commands[self.attr]["bg"] = "lightgrey"
+                        else:
+                            FLUSH = 1
+                            self.data.elem_commands[self.attr]["bg"] = "green"
                 elif self.attr == "BLIND":
                     
                     if event.num == 1:
@@ -309,10 +342,15 @@ class Xevent():
                                         
                                         self.data.fixtures[fix]["ATTRIBUT"][attr]["VALUE"] = v2
                                         self.data.elem_attr[fix][attr]["text"] = str(attr)+' '+str(round(v,2))
-                                        cmd+=update_dmx(attr,data)
+                                        if str(event.type) == "ButtonRelease":
+                                            if FLUSH :
+                                                cmd+=update_dmx(attr,data,value="off",flush=FLUSH)
+                                        else:
+                                            cmd+=update_dmx(attr,data,flush=FLUSH)
                                         #worker.fade_dmx(fix,attr,data,v,v2)
                                   
-                        client.send(cmd )
+                        if cmd:
+                            client.send(cmd )
                                         
                                 
                         
@@ -403,13 +441,16 @@ def wheel(event,d=None):
     
 import copy
 
+frame_fix = tk.Frame(root,bg="lightblue",width="100px")
+frame_fix.pack(fill=tk.BOTH, side=tk.TOP)
+
 class Master():
     def __init__(self):
         self.load()
         self.all_attr =["DIM","VDIM","PAN","TILT"]
         self.elem_attr = {}
         
-        self.commands =["BLIND","CLEAR","STORE","EDIT","","","","BACKUP","SET","","SELECT","ACTIVATE","","","",]
+        self.commands =["BLIND","CLEAR","STORE","EDIT","","FX OFF","","BACKUP","SET","","SELECT","ACTIVATE","FLUSH","","",]
         self.elem_commands = {}
         self.val_commands = {}
 
@@ -506,7 +547,7 @@ class Master():
 
         
         DATA = OrderedDict()
-        DATA["DIM-FINE"]  = {"NR": 8, "MASTER": "", "MODE": "F", "VALUE": 5.0,"ACTIVE":0}
+        DATA["SHUTTER"]  = {"NR": 8, "MASTER": "", "MODE": "S", "VALUE": 5.0,"ACTIVE":0}
         DATA["VDIM"]  = {"NR": -1, "MASTER": "", "MODE": "F", "VALUE": 0.0,"ACTIVE":0}
         DATA["PAN"]   = {"NR": 0, "MASTER": "", "MODE": "F", "VALUE": 127.0,"ACTIVE":0}
         DATA["PAN-FINE"]   = {"NR": 1, "MASTER": "", "MODE": "F", "VALUE": 127.0,"ACTIVE":0}
@@ -661,7 +702,7 @@ class Master():
         i=0
         c=0
         r=0
-        frame = tk.Frame(root,bg="black")
+        frame = tk.Frame(frame_fix,bg="black")
         frame.pack(fill=tk.X, side=tk.TOP)
 
         b = tk.Button(frame,bg="lightblue", text="FIX:"+str(fix)+" "+data["NAME"],width=20)
@@ -750,6 +791,8 @@ class Master():
                 self.elem_commands[comm] = b
                 self.val_commands[comm] = 0
             b.bind("<Button>",Xevent(fix=0,elem=b,attr=comm,data=self,mode="COMMAND").cb)
+            if comm == "FX OFF":
+                b["bg"] = "magenta"
             if comm:
                 b.grid(row=r, column=c, sticky=tk.W+tk.E)
             c+=1
@@ -782,6 +825,7 @@ class Master():
                 print([label])
             b = tk.Button(frame,bg="grey", text="Preset:"+str(k)+"\n"+str(len(self.val_presets[k]))+":"+label,width=8,height=2)
             b.bind("<Button>",Xevent(fix=0,elem=b,attr=k,data=self,mode="PRESET").cb)
+            b.bind("<ButtonRelease>",Xevent(fix=0,elem=b,attr=k,data=self,mode="PRESET").cb)
             
             if k in self.val_presets and len(self.val_presets[k]) :
                 b["bg"] = "yellow"
@@ -833,7 +877,7 @@ class Master():
     def render(self):
         r=0
         c=0
-        dim_frame = tk.Frame(root,bg="black")
+        dim_frame = tk.Frame(frame_fix,bg="black")
         dim_frame.pack(fill=tk.X, side=tk.TOP)
         for fix in self.fixtures:
             data = self.fixtures[fix]

+ 25 - 12
console.py

@@ -200,7 +200,11 @@ class DMXCH(object):
         self._last_val = 0
     def fade(self,target,time=0,clock=0,delay=0):
         if target != self._base_value:
-            self._fade = Fade(self._base_value,target,time=time,clock=clock,delay=delay)
+            try:
+                target = float(target)
+                self._fade = Fade(self._base_value,target,time=time,clock=clock,delay=delay)
+            except Exception as e:
+                print( "Except:",e)
     def fx(self,xtype="sinus",size=40,speed=40,offset=0,clock=0):
         if str(xtype).lower() == "off":
             #self._fx = Fade(self._fx_value,target=0,time=2,clock=clock) 
@@ -211,8 +215,12 @@ class DMXCH(object):
     def flush(self,target,time=0,clock=0,delay=0):
         if str(target).lower() == "off":
             self._flush = None
-        elif target != self._base_value:
-            self._flush = Fade(self._last_value,target,time=time,clock=clock,delay=delay)
+        else:#elif target != self._base_value:
+            try:
+                target = float(target)
+                self._flush = Fade(self._last_val,target,time=time,clock=clock,delay=delay)
+            except Exception as e:
+                print( "Except:",e)
     def flush_fx(self,xtype="sinus",size=40,speed=40,offset=0,clock=0):
         if str(xtype).lower() == "off":
             #self._fx = Fade(self._fx_value,target=0,time=2,clock=clock) 
@@ -235,6 +243,7 @@ class DMXCH(object):
 
         if self._flush is not None:
             value = self._flush.next(clock)
+            fx_value = 0
         elif self._fade is not None:#is Fade:# is Fade:
             self._base_value = self._fade.next(clock)
             value = self._base_value
@@ -242,7 +251,7 @@ class DMXCH(object):
         
         if self._flush_fx is not None:# is FX:
             fx_value = self._flush_fx.next(clock)
-        elif self._fx is not None:# is FX:
+        elif self._fx is not None and self._flush is None:# is FX:
             self._fx_value = self._fx.next(clock)
             fx_value = self._fx_value
 
@@ -279,15 +288,18 @@ def CB(data):
             #print("DMX:",xxcmd)
             if "alloff" == xxcmd[1].lower():
                 for i in Bdmx:
-                    i.flush(xtype="off",clock=c)
+                    if i is not None:
+                        i.flush(target="off",clock=c)
+                continue
             l = xxcmd
             try:
                 k=int(l[0])-1
-                v=float(l[1])
+                v=l[1]
+                
                 if len(l) >= 3:
                     time=float(l[2])
-                if v > 255:
-                    v = 255
+                #if v > 255:
+                #    v = 255
                 if len(l) >= 3:
                     try:time=float(l[2])
                     except:pass
@@ -306,11 +318,11 @@ def CB(data):
             l = xxcmd
             try:
                 k=int(l[0])-1
-                v=float(l[1])
+                v=l[1]
                 if len(l) >= 3:
                     time=float(l[2])
-                if v > 255:
-                    v = 255
+                #if v > 255:
+                #    v = 255
                 if len(l) >= 3:
                     try:time=float(l[2])
                     except:pass
@@ -328,7 +340,8 @@ def CB(data):
             print("fxf:",xxcmd)
             if "alloff" == xxcmd[1].lower():
                 for i in Bdmx:
-                    i.flush_fx(xtype="off",clock=c)
+                    if i is not None:
+                        i.flush_fx(xtype="off",clock=c)
             l = xxcmd
             try:
                 xtype=""

+ 3 - 3
show/GloryCamp2021/presets.sav

@@ -14,7 +14,7 @@
 13		{}
 14		{"701": {"PAN": 136.8099999999996}}
 15		{}
-16		{}
+16		{"701": {"PAN": 256}}
 17		{}
 18		{}
 19		{}
@@ -22,7 +22,7 @@
 21		{}
 22		{}
 23		{}
-24		{}
+24		{"701": {"PAN": 45.21}}
 25		{}
 26		{}
 27		{}
@@ -30,7 +30,7 @@
 29		{}
 30		{}
 31		{}
-32		{}
+32		{"701": {"PAN": 0}}
 33		{}
 34		{}
 35		{}