Sfoglia il codice sorgente

release: Fadetime implemented in console d22:v23:t3

micha 3 anni fa
parent
commit
3a174fafd9
3 ha cambiato i file con 74 aggiunte e 101 eliminazioni
  1. 60 89
      Editor3.py
  2. 13 11
      console.py
  3. 1 1
      show/GloryCamp2021/presets.sav

+ 60 - 89
Editor3.py

@@ -60,10 +60,28 @@ BEAM  = ["GOBO","G-ROT","PRISMA","P-ROT","FOCUS","SPEED"]
 INT   = ["DIM","SHUTTER","STROBE","FUNC"]
 client = chat.tcp_sender()
 
+fade = 10
+def build_cmd(dmx,val,args=[fade]):
+    cmd=""
+    if type(val) is float or type(val) is int:
+        cmd += ",d{}:{:0.4f}".format(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)
+
+    return cmd
+
+
 def update_dmx(attr,data):
     global BLIND
     dmx = data["DMX"]
     val = None
+    cmd=""
     if attr == "VDIM":
         for attr in data["ATTRIBUT"]:
             dmx = data["DMX"]
@@ -75,12 +93,10 @@ def update_dmx(attr,data):
             if data["ATTRIBUT"][attr]["MASTER"]:
                 val = val * (data["ATTRIBUT"]["VDIM"]["VALUE"] / 255.)
             if val is not None:            
-                cmd = "d{}:{}".format(dmx,int(val))
+                
+                #cmd += ",d{}:{:0.4f}".format(dmx,int(val))
+                cmd += build_cmd(dmx,val)
                 #print("cmd",cmd)
-                if not BLIND:
-                    client.send(cmd )
-                else:
-                    pass#print("BLIND ! cmd",cmd)
                 
         
     elif data["ATTRIBUT"][attr]["NR"] >= 0:
@@ -90,72 +106,17 @@ def update_dmx(attr,data):
             if "VDIM" in data["ATTRIBUT"]:
                 val = val * (data["ATTRIBUT"]["VDIM"]["VALUE"] / 255.)
         if val is not None:            
-            cmd = "d{}:{}".format(dmx,int(val))
+            #cmd += ",d{}:{}".format(dmx,int(val))
+            cmd += build_cmd(dmx,val)
             #print("cmd",cmd)
-            if not BLIND:
-                client.send(cmd )
-            else:
-                pass#print("BLIND ! cmd",cmd)
 
+    if not BLIND:
+        #client.send(cmd )
+        pass
+    else:
+        cmd=""
+    return cmd
 
-            
-class Worker():
-    def __init__(self):
-        self.fade = OrderedDict()
-        self.timer = time.time()
-    def loop(self):
-        while 1:
-            self.next()
-            
-    def next(self):
-        if self.timer+(1/30.) < time.time():
-            try:
-                lock.acquire()
-                #if self.timer+1 < time.time():
-                self.timer = time.time()
-                #print("next")
-                for fix in self.fade:
-                    for attr in self.fade[fix]:
-                        if 1:#len(self.fade[])>=2:
-                            fd=self.fade[fix][attr][0]
-                            xx=fd.next()
-                            if xx:
-                                x=fd.value
-                                #print("fade",xx,xx)
-                                data=self.fade[fix][attr][1]
-                                try:   
-                                    data["ATTRIBUT"][attr]["VALUE"] = x                       
-                                    update_dmx(attr,data)                            
-                                except Exception as e:
-                                    print("next EXCEPTION",e)
-            finally:
-                #lock.acquire()
-                lock.release()               
-                            
-        else:
-            time.sleep(0.1)
-    
-    def fade_dmx(self,fix,attr,data,v,v2,ft=None):
-        if ft is None:
-            ft = 4
-        if data["ATTRIBUT"][attr]["MODE"] == "S":
-            ft=0
-        #print("fade_dmx",fix,attr,v,v2)
-        try:
-            lock.acquire()
-            if fix not in self.fade:
-                self.fade[fix] = OrderedDict()
-            if attr not in self.fade[fix]:
-                self.fade[fix][attr] = OrderedDict()
-            self.fade[fix][attr] = [motion.FadeFast(v,v2,ft),data]
-        finally:
-            #lock.acquire()
-            lock.release()
-        
-
-worker = Worker()
-lock = thread.allocate_lock()
-thread.start_new_thread(worker.loop,())
 
 class Xevent():
     def __init__(self,fix,elem,attr=None,data=None,mode=None):
@@ -174,30 +135,36 @@ class Xevent():
             return 1
 
     
-        v=data["ATTRIBUT"][attr]["VALUE"]
+        v2=data["ATTRIBUT"][attr]["VALUE"]
         change=0
+        increment = 4.11
         if action == "+":
-            v+= 4.11
+            v2+= increment
+            v = "+{:0.4f}".format( increment ) #) #4.11"
             change=1
         elif action == "-":
-            v-= 4.11
+            v2-= 4.11
+            v = "-{:0.4f}".format( increment ) #) #4.11"
             change=1
 
             
-        if v < 0:
-            v=0
-        elif v > 256:
-            v=256
+        if v2 < 0:
+            v2=0
+        elif v2 > 256:
+            v2=256
             
         if change:
             data["ATTRIBUT"][attr]["ACTIVE"] = 1
             elem["bg"] = "yellow"
-            v2 = v
-            v = data["ATTRIBUT"][attr]["VALUE"]
+            #v2 = v
+            #v = data["ATTRIBUT"][attr]["VALUE"]
             data["ATTRIBUT"][attr]["VALUE"] = v2
-            elem["text"] = str(attr)+' '+str(round(v2,2))
-            worker.fade_dmx(fix,attr,data,v,v2,ft=0)
-            #update_dmx(attr=attr,data=data)
+            elem["text"] = "{} {:0.4f}".format(attr,v2)
+            #worker.fade_dmx(fix,attr,data,v,v2,ft=0)
+            
+            cmd=update_dmx(attr=attr,data=data)
+            #data["ATTRIBUT"][attr]["VALUE"] = v2
+            client.send(cmd)
 
         
 
@@ -304,6 +271,7 @@ class Xevent():
                         if nr not in self.data.val_presets:
                             self.data.val_presets[nr] = OrderedDict()
                         sdata = self.data.val_presets[nr]
+                        cmd = ""
                         for fix in sdata:
                             for attr in sdata[fix]:
                                 v2 = sdata[fix][attr]
@@ -316,9 +284,10 @@ class Xevent():
                                         
                                         self.data.fixtures[fix]["ATTRIBUT"][attr]["VALUE"] = v2
                                         self.data.elem_attr[fix][attr]["text"] = str(attr)+' '+str(round(v,2))
-                                        #update_dmx(attr,data)
-                                        worker.fade_dmx(fix,attr,data,v,v2)
+                                        cmd+=update_dmx(attr,data)
+                                        #worker.fade_dmx(fix,attr,data,v,v2)
                                   
+                        client.send(cmd )
                                         
                                 
                         
@@ -329,6 +298,7 @@ class Xevent():
                         if nr not in self.data.val_presets:
                             self.data.val_presets[nr] = OrderedDict()
                         sdata = self.data.val_presets[nr]
+                        cmd=""
                         for fix in sdata:
                             for attr in sdata[fix]:
                                 v2 = sdata[fix][attr]
@@ -341,9 +311,10 @@ class Xevent():
                                         #self.data.fixtures[fix]["ATTRIBUT"][attr]["VALUE"] = v
                                         #print(str(attr)+' '+str(round(v,2)))
                                         #self.data.elem_attr[fix][attr]["text"] = str(attr)+' '+str(round(v,2))
-                                        #update_dmx(attr,data)
+                                        cmd+=update_dmx(attr,data)
                                         print("go",fix,attr,v,v2)
-                                        worker.fade_dmx(fix,attr,data,v,v2,ft=0)
+                                        #worker.fade_dmx(fix,attr,data,v,v2,ft=0)
+                        client.send(cmd )
                                         
                                 
                         
@@ -363,7 +334,7 @@ class Xevent():
                         if self.attr != attr:
                             continue
                         if event.num == 1:
-                            #self.encoder(attr=attr,data=data,elem=elem,action="click")
+                            #self#encoder(attr=attr,data=data,elem=elem,action="click")
                             data["ATTRIBUT"][attr]["ACTIVE"] = 1
                             elem["bg"] = "yellow"
                             
@@ -395,10 +366,10 @@ class Xevent():
 
                 
 
-        
-        except Exception as e:
-            print("== cb EXCEPT",e)
-            print("Error on line {}".format(sys.exc_info()[-1].tb_lineno))
+        finally:pass
+        #except Exception as e:
+        #    print("== cb EXCEPT",e)
+        #    print("Error on line {}".format(sys.exc_info()[-1].tb_lineno))
         #print(self.elem["text"],self.attr,self.data)
         
                                             

+ 13 - 11
console.py

@@ -68,7 +68,7 @@ class Main():
             for i,dmxch in enumerate(Bdmx):
                 v = dmxch.next(t)
                 if i == 0:
-                    if xx[i] != v:
+                    if xx[i]+1 < v or xx[i]-1 > v :
                         #print("----v",x[i],v,t)
                         print("i:{:0.2f} xx:{:0.2f} v:{:0.2f} {:0.2f}----v {}".format(i,xx[i],v,t+100,dmxch))
                 xx[i] = int(v)
@@ -105,17 +105,18 @@ thread.start_new_thread(clock.loop,())
 
 class Fade():
     def __init__(self,start,target,time,clock):
-        print("init Fade",start,target,time,clock)
+        #print("init Fade ",start,target,time,clock)
         self.__clock = clock
         self.__clock_curr = clock
         self.__time = time
         self.__start = start
         self.__last = start
         self.__target = target
+        print("INIT", str(self) )
     def __str__(self):
         return self.__repr__()
     def __repr__(self):
-        return " Fade Next:{:0.2f} Start:{:0.2f} Target:{:0.2f} Clock:{:0.2f} ".format( 
+        return "<Fade Next:{:0.2f} Start:{:0.2f} Target:{:0.2f} Clock:{:0.2f}>".format( 
                     self.next(), self.__start,self.__target,self.__clock_curr )
     def next(self,clock=None):
         if self.__time <= 0:
@@ -151,6 +152,7 @@ class DMXCH(object):
         self._value = 1
         self._fade  = None
         self._fx    = None
+
     def fade(self,target,time=0,clock=0):
         if target != self._value:
             self._fade = Fade(self._value,target,time=time,clock=clock)
@@ -179,7 +181,7 @@ for i in range(512):
 def split_cmd(data):
     if "cmd" in data:
         cmd = data["cmd"]
-        print("cmd",cmd)
+        #print("cmd",cmd)
         if "," in cmd:
             cmds = cmd.split(",")
         else:
@@ -192,23 +194,23 @@ def CB(data):
     print("CB",data)
 
     cmds = split_cmd(data)
-    t = clock.time() 
+    c = clock.time() 
     for xcmd in cmds:
         if xcmd.startswith("d"):
             xxcmd=xcmd[1:].split(":")
-            print("DMX:",xxcmd)
+            #print("DMX:",xxcmd)
             l = xxcmd
+            t = 2
             try:
                 k=int(l[0])-1
-                v=int(l[1])
+                v=float(l[1])
+                if len(l) >= 3:
+                    t=float(l[2])
                 if v > 255:
                     v = 255
 
                 if len(Bdmx) > k:
-                    print( Bdmx[k])
-                    #if dmx[k] is int:
-                    #dmx[k] = v
-                    Bdmx[k].fade(target=v,clock=t ,time=2)#clock.time())
+                    Bdmx[k].fade(target=v,time=t, clock=c)
             except Exception as e:
                 print("EXCEPTION IN DMX",e)
 

+ 1 - 1
show/GloryCamp2021/presets.sav

@@ -10,7 +10,7 @@
 9		{}
 10		{}
 11		{"3001": {"VDIM": 62.0, "PAN": 154.0, "TILT": 64.0, "RED": 57.0, "GREEN": 255.0, "BLUE": 159.0}}
-12		{"3001": {"VDIM": 62.0, "PAN": 154.0, "TILT": 64.0, "RED": 57.0, "GREEN": 255.0, "BLUE": 159.0}}
+12		{"1": {"DIM": 61.65}, "3001": {"PAN": 47.13999999999993, "TILT": 117.42999999999999}}
 13		{}
 14		{}
 15		{}