fxlib.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. #/usr/bin/python3
  2. import random
  3. import sys
  4. sys.path.insert(0,"/opt/LibreLight/Xdesk/")
  5. import lib.fixlib as fixlib
  6. import lib.meta as meta
  7. def cprint(*args):
  8. print(args)
  9. def process_wings(xfixtures,fx_prm):
  10. """process the wing's of selected fixtures
  11. input: [1,2,3,4,10,12,13,14]
  12. if WING = 2 return: [[1,2,3,4][14,13,12,10]]
  13. """
  14. wing_buffer = []
  15. fix_count = len(xfixtures)
  16. prm = fx_prm # ToDo: global WING for PAN/TILE !? ATTRIBUT is not availible in this moment
  17. if prm["WING"] > 1 and fix_count > 1:
  18. wing_count = fix_count // prm["WING"]
  19. number_of_fix_in_wing = fix_count // wing_count
  20. if number_of_fix_in_wing < 2:
  21. number_of_fix_in_wing = 2
  22. for i in range(number_of_fix_in_wing):
  23. j = i*wing_count
  24. wing = xfixtures[j:j+wing_count]
  25. if i%2!=0:
  26. wing = wing[::-1]
  27. cprint("wing",i,"j",j,"wing_count:",wing_count,"wing",wing)
  28. wing_buffer.append(wing)
  29. if fix_count > j+wing_count: # append Fixtures Left over
  30. wing = xfixtures[j+wing_count:]
  31. wing_buffer.append(wing)
  32. else:
  33. wing_buffer.append(xfixtures)
  34. if prm["SHUFFLE"]:
  35. _wing_buffer = []
  36. for wing in wing_buffer:
  37. wing = wing[:]
  38. random.seed(9300) # sync random
  39. random.shuffle(wing)
  40. _wing_buffer.append(wing)
  41. wing_buffer = _wing_buffer
  42. return wing_buffer
  43. def process_effect(wing_buffer,fx_prm,fx_prm_move,modes,jclient_send,master,FIXTURES,fx_name=""):
  44. jdatas = []
  45. offset = 0
  46. offset_move = 0
  47. start = fx_prm["START"]
  48. base = fx_prm["BASE"]
  49. for wi, wing in enumerate(wing_buffer):
  50. count_of_fix_in_wing = len(wing)
  51. coffset= 0 # 1024/count_of_fix_in_wing * (offset/255)
  52. coffset_move=0
  53. for fix in wing:
  54. if fix not in FIXTURES.fixtures:
  55. continue
  56. data = FIXTURES.fixtures[fix]
  57. for attr in data["ATTRIBUT"]:
  58. if attr.startswith("_"):
  59. continue
  60. if attr.endswith("-FINE"):
  61. continue
  62. jdata = {"MODE":"FX"}
  63. jdata["WING"] = wi
  64. jdata["VALUE"] = None
  65. jdata["FIX"] = fix
  66. dmx = fixlib.get_dmx(FIXTURES.fixtures,fix,attr)
  67. jdata["DMX"] = dmx
  68. dmx_fine = fixlib.get_dmx(FIXTURES.fixtures,fix,attr+"-FINE")
  69. if dmx_fine != jdata["DMX"] and dmx > 0:
  70. jdata["DMX-FINE"] = dmx_fine
  71. jdata["ATTR"] = attr
  72. tmp_fx_prm = fx_prm
  73. coffset= round(offset,1)
  74. if attr in ["PAN","TILT"]:
  75. tmp_fx_prm = fx_prm_move
  76. coffset_move= round(offset_move,1)
  77. csize = tmp_fx_prm["SIZE"]
  78. cspeed = tmp_fx_prm["SPEED"]
  79. cstart = tmp_fx_prm["START"]
  80. cbase = tmp_fx_prm["BASE"]
  81. width = tmp_fx_prm["WIDTH"]
  82. invert = tmp_fx_prm["INVERT"]
  83. fx=""
  84. if "SIN" in fx_name:
  85. fx = "sinus"
  86. elif "FD" in fx_name:
  87. fx = "fade"
  88. elif "RND" in fx_name:
  89. fx = "rnd"
  90. elif "STATIC" in fx_name:
  91. fx = "static"
  92. elif "ON" in fx_name:
  93. fx = "on"
  94. elif "RAMP2" in fx_name:
  95. fx = "bump2"
  96. fx = "ramp2"
  97. elif "RAMP" in fx_name:
  98. fx = "ramp"
  99. elif "COS" in fx_name:
  100. fx = "cosinus"
  101. if fx:
  102. if attr in ["PAN","TILT"]:
  103. cprint("SKIP FX attr:{} fix:{} " .format(attr,fix) )
  104. continue
  105. if fx:
  106. if cspeed < 0:
  107. fx = "off"
  108. else:
  109. if ":DIM" in fx_name:
  110. base=""
  111. ffxb=meta.fx_mo[fx_prm["MO"]]
  112. if attr == "DIM":
  113. if cspeed < 0:
  114. fx = "off"
  115. else:
  116. fx = ffxb #"fade"
  117. elif ":TILT" in fx_name:
  118. base=""
  119. if attr == "PAN":
  120. fx = "off"
  121. if attr == "TILT":
  122. if cspeed < 0:
  123. fx = "off"
  124. else:
  125. fx = "sinus"
  126. elif ":PAN" in fx_name:
  127. base=""
  128. if attr == "PAN":
  129. if cspeed < 0:
  130. fx = "off"
  131. else:
  132. fx = "cosinus"
  133. if attr == "TILT":
  134. fx = "off"
  135. elif ":CIR" in fx_name:
  136. base=""
  137. if attr == "PAN":
  138. if cspeed < 0:
  139. fx = "off"
  140. else:
  141. fx = "cosinus"
  142. if attr == "TILT":
  143. if cspeed < 0:
  144. fx = "off"
  145. else:
  146. fx = "sinus"
  147. elif ":RED" in f_name:
  148. fxon = "on"
  149. fxoff = "static" #"off"
  150. MODE = fx_modes[fx_prm["MODE"]]
  151. if "RED" in MODE:
  152. base="-"
  153. if attr == "RED":
  154. fx = fxon # ON ----
  155. #csize *=-1
  156. if attr == "GREEN":
  157. fx = "static"
  158. csize = 0
  159. if attr == "BLUE":
  160. fx = "static"
  161. csize = 0
  162. elif "GREEN" in MODE:
  163. base="-"
  164. if attr == "RED":
  165. fx = "static"
  166. csize = 0
  167. if attr == "GREEN":
  168. fx = fxon # ON ----
  169. csize *=-1
  170. if attr == "BLUE":
  171. fx = "static"
  172. csize = 0
  173. elif "BLUE" in MODE:
  174. base="-"
  175. if attr == "RED":
  176. fx = "static"
  177. csize = 0
  178. if attr == "GREEN":
  179. fx = "static"
  180. csize = 0
  181. if attr == "BLUE":
  182. fx = fxon # ON ----
  183. csize *=-1
  184. elif "YELLOW" in MODE:
  185. base="-"
  186. if attr == "RED":
  187. fx = fxon
  188. csize *=-1
  189. if attr == "GREEN":
  190. fx = fxon
  191. csize *=-1
  192. if attr == "BLUE":
  193. fx = "static"
  194. csize = 0
  195. elif "CYAN" in MODE:
  196. base="-"
  197. if attr == "RED":
  198. fx = fxoff
  199. invert *= -1
  200. csize = 0
  201. fx = fxon
  202. if attr == "GREEN":
  203. fx = fxon
  204. csize=0
  205. if attr == "BLUE":
  206. fx = fxon
  207. csize=0
  208. elif "MAG" in MODE:
  209. base="-"
  210. if attr == "RED":
  211. fx = fxon
  212. csize=0
  213. if attr == "GREEN":
  214. fx = fxoff
  215. invert *= -1
  216. csize = 0
  217. fx = fxon
  218. if attr == "BLUE":
  219. fx = fxon
  220. csize=0
  221. else:
  222. cprint("FX: unbekant",fx_modes[fx_prm["MODE"]],color="red")
  223. fxtype = fx
  224. fxtype = fx
  225. if "FX" not in data["ATTRIBUT"][attr]:
  226. data["ATTRIBUT"][attr]["FX"] =""
  227. if "FX2" not in data["ATTRIBUT"][attr]:
  228. data["ATTRIBUT"][attr]["FX2"] ={}
  229. if data["ATTRIBUT"][attr]["ACTIVE"] and fxtype:
  230. fjdata = {}
  231. if cspeed < 0.1:
  232. fjdata["TYPE"] = "off"
  233. else:
  234. fjdata["TYPE"] = fxtype
  235. fjdata["SIZE"] = round(csize,2)
  236. fjdata["SPEED"] = round(cspeed,2)
  237. fjdata["WIDTH"] = int(width)
  238. fjdata["START"] = cstart
  239. if attr in ["PAN","TILT"]:
  240. fjdata["OFFSET"]= round(coffset_move,2)
  241. else:
  242. fjdata["OFFSET"]= round(coffset,2)
  243. fjdata["INVERT"]= int(invert)
  244. fjdata["BASE"] = cbase
  245. jdata["FX2"] = fjdata
  246. data["ATTRIBUT"][attr]["FX2"] = fjdata
  247. jdatas.append(jdata)
  248. #print("GOO FX:",jdata)
  249. if fx_prm_move["OFFSET"] > 0.5: # and
  250. aoffset_move = (100/count_of_fix_in_wing) * (fx_prm_move["OFFSET"]/100)
  251. if fx_prm_move["DIR"] <= 0:
  252. offset_move -= aoffset_move
  253. else:
  254. offset_move += aoffset_move
  255. offset_move = round(offset_move,2)
  256. if fx_prm["OFFSET"] > 0.5: # and
  257. aoffset = (100/count_of_fix_in_wing) * (fx_prm["OFFSET"]/100)
  258. if fx_prm["DIR"] <= 0:
  259. offset -= aoffset
  260. else:
  261. offset += aoffset
  262. offset = round(offset,2)
  263. #exit()
  264. if jdatas and not modes.val("BLIND"):
  265. jclient_send(jdatas)
  266. master._refresh_fix()
  267. return jdatas