diff --git a/LJ.conf b/LJ.conf index bda224e..5bac5b6 100644 --- a/LJ.conf +++ b/LJ.conf @@ -2,7 +2,7 @@ lasernumber = 4 debug = 0 ljayserverip = 0.0.0.0 -wwwip = 192.168.2.45 +wwwip = 192.168.2.43 nozoscip = 127.0.0.1 bhoroscip = 127.0.0.1 autostart = artnet @@ -12,12 +12,12 @@ wsport = 9001 [laser0] color = -1 type = DS1000 -ip = 192.168.2.3 +ip = 192.168.2.43 kpps = 25000 -centerx = -393 -centery = 390 -zoomx = 50.0 -zoomy = 50.0 +centerx = -5485 +centery = -11392 +zoomx = 80.0 +zoomy = 86.0 sizex = 32000 sizey = 32000 finangle = 0.0 @@ -25,19 +25,19 @@ swapx = -1 swapy = -1 lsteps = [ (1.0, 8),(0.25, 3), (0.75, 3), (1.0, 10)] warpdest = [[-1500., 1500.], - [ 1500., 1500.], - [ 1500.,-1500.], - [-1500.,-1500.]] + [ 1500., 1500.], + [ 1500.,-1500.], + [-1500.,-1500.]] [laser1] color = -1 type = LOCAL ip = 192.168.2.5 kpps = 25000 -centerx = 0 -centery = 0 -zoomx = 50.0 -zoomy = 50.0 +centerx = -17720 +centery = 419 +zoomx = 35.0 +zoomy = 35.0 sizex = 32000 sizey = 32000 finangle = 0.0 @@ -45,15 +45,15 @@ swapx = -1 swapy = -1 lsteps = [ (1.0, 2),(0.25, 1), (0.75, 1), (1.0, 5)] warpdest = [[-1500., 1500.], - [ 1500., 1500.], - [ 1500.,-1500.], - [-1500.,-1500.]] + [ 1500., 1500.], + [ 1500.,-1500.], + [-1500.,-1500.]] [laser2] color = -1 type = LUKE400 ip = 192.168.2.6 -kpps = 20361 +kpps = 25000 centerx = -3798 centery = -13079 zoomx = 73.0 @@ -65,9 +65,9 @@ swapx = -1 swapy = -1 lsteps = [(1.0, 8),(0.25, 3), (0.75, 3), (1.0, 10)] warpdest = [[-1500., 1500.], - [ 1500., 1500.], - [ 1500.,-1500.], - [-1500.,-1500.]] + [ 1500., 1500.], + [ 1500.,-1500.], + [-1500.,-1500.]] [laser3] color = -1 @@ -85,9 +85,9 @@ swapx = 1 swapy = 1 lsteps = [(1.0, 8),(0.25, 3), (0.75, 3), (1.0, 10)] warpdest = [[-1500., 1500.], - [ 1500., 1500.], - [ 1500.,-1500.], - [-1500.,-1500.]] + [ 1500., 1500.], + [ 1500.,-1500.], + [-1500.,-1500.]] [plugins] plugins = { diff --git a/LJ_template..conf b/LJ_template..conf deleted file mode 100644 index 3d5cc3d..0000000 --- a/LJ_template..conf +++ /dev/null @@ -1,114 +0,0 @@ -[General] -lasernumber = 1 -debug = 0 -ljayserverip = 0.0.0.0 -wwwip = 192.168.2.43 -nozoscip = 127.0.0.1 -bhoroscip = 127.0.0.1 -autostart = artnet -wstype = ws -wsport = 9001 - -[laser0] -color = -1 -type = DS1000 -ip = 192.168.2.4 -kpps = 25000 -centerx = 0 -centery = 0 -zoomx = 50.0 -zoomy = 50.0 -sizex = 32000 -sizey = 32000 -finangle = 0.0 -swapx = 1 -swapy = -1 -lsteps = [ (1.0, 8),(0.25, 3), (0.75, 3), (1.0, 10)] -warpdest = [[-1500., 1500.], - [ 1500., 1500.], - [ 1500.,-1500.], - [-1500.,-1500.]] - -[laser1] -color = -1 -type = LOCAL -ip = 192.168.2.43 -kpps = 25000 -centerx = 0 -centery = 0 -zoomx = 50.0 -zoomy = 50.0 -sizex = 32000 -sizey = 32000 -finangle = 0.0 -swapx = -1 -swapy = -1 -lsteps = [ (1.0, 2),(0.25, 1), (0.75, 1), (1.0, 5)] -warpdest = [[-1500., 1500.], - [ 1500., 1500.], - [ 1500.,-1500.], - [-1500.,-1500.]] - -[laser2] -color = -1 -type = LUKE400 -ip = 192.168.2.6 -kpps = 25000 -centerx = 0 -centery = 0 -zoomx = 50.0 -zoomy = 50.0 -sizex = 32000 -sizey = 32000 -finangle = 0.0 -swapx = -1 -swapy = -1 -lsteps = [(1.0, 8),(0.25, 3), (0.75, 3), (1.0, 10)] -warpdest = [[-1500., 1500.], - [ 1500., 1500.], - [ 1500.,-1500.], - [-1500.,-1500.]] - -[laser3] -color = -1 -type = LUKE400 -ip = 192.168.1.5 -kpps = 25000 -centerx = 0 -centery = 0 -zoomx = 50.0 -zoomy = 50.0 -sizex = 32000 -sizey = 32000 -finangle = 0.0 -swapx = -1 -swapy = -1 -lsteps = [(1.0, 8),(0.25, 3), (0.75, 3), (1.0, 10)] -warpdest = [[-1500., 1500.], - [ 1500., 1500.], - [ 1500.,-1500.], - [-1500.,-1500.]] - -[plugins] -plugins = { - "aurora": {"OSC": 8090, "command": "python3 plugins/aurora/aurora.py", "display": True}, - "nozoid": {"OSC": 8003, "command": "python3 plugins/audio/nozoids3.py", "display": True}, - "glyph": {"OSC": 8004, "command": "python3 plugins/laserglyph.py", "display": True}, - "planet": {"OSC": 8005, "command": "python3 plugins/planetarium/main.py", "display": True}, - "words": {"OSC": 8006, "command": "python3 plugins/livewords3.py", "display": True}, - "cycl": {"OSC": 8007, "command": "python3 plugins/textcycl.py", "display": True}, - "simu": {"OSC": 8008, "command": "python plugins/pysimu.py", "display": False}, - "artnet": {"OSC": 8009, "command": "python3 libs3/artnet.py", "display": False}, - "trckr": {"OSC": 8017, "command": "python3 plugins/trckr.py", "display": False}, - "maxw": {"OSC": 8012, "command": "python3 plugins/maxwell.py", "display": True}, - "square": {"OSC": 8013, "command": "python3 plugins/square.py", "display": True}, - "custom1": {"OSC": 8014, "command": "python3 plugins/custom1.py", "display": True}, - "mitraille": {"OSC": 8015, "command": "python3 plugins/audio/mitraille.py", "display": True}, - "livecode": {"OSC": 8016, "command": "python3 plugins/livecoding.py", "display": True}, - "ljpong": {"OSC": 8020, "command": "python plugins/games/ljpong/main.py", "display": True}, - "ljwars": {"OSC": 8021, "command": "python plugins/games/ljsw/main.py", "display": True}, - "audiogen": {"OSC": 8030, "command": "python3 plugins/audio/audiogen.py", "display": False}, - "midigen": {"OSC": 8031, "command": "python3 plugins/audio/midigen.py", "display": False}, - "viewgen": {"OSC": 8032, "command": "python3 plugins/audio/viewgen.py", "display": True} - } - diff --git a/README.md b/README.md index 8a986ec..9cea9a3 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ By Sam Neurohack, Loloster, Cocoa LICENCE : CC BY -![LJ](https://www.teamlaser.tk/lj/images/lj2.png) +![LJ](https://www.teamlaser.fr/lj/images/lj2.png) A software laser framework with GUI, for up to 4 lasers live actions with ethedreams DACs. Think creative like Laser "battles", planetarium, sharing available lasers in demoparties for competition, ... @@ -20,14 +20,6 @@ LJ has 5 main components : Important : for best performance LJ is meant to run in a dedicated computer especially with multiple lasers and highly multitasked load : if you watch video, use live webcam face recognition, webui simulator,... and run LJ on the same computer, well you need a bunch of cores. If you don't, spread the load : you can use webui on a tablet, the livecam on a phone, run pointlists generators on another computer,... -# -# Requirements -# - -- Our old thinkpad with i5 (2.6 Ghz, 2 cores, 4 threads) works really fine if you run laser only related tasks. -- Etherdream DAC/ILDA laser. But you can develop your generators without actual lasers thanks to simu page. -- Wired network. Only the web GUI can be on wifi. - # # Features among many others. # @@ -36,7 +28,7 @@ Important : for best performance LJ is meant to run in a dedicated computer espe - Some Lasermapping ('alignment') like in videomapping. - OSC and websocket commands. Very cool : LJ can script or be scripted. - Python3 -- Web User Interface in your browser : open www/index.html. Javascript is needed. By default it connect to localhost. If you want to control remotely, you need edit webui choice : python3 configure.py +- Web User Interface in your browser : open www/index.html. Javascript is needed. By default it connect to localhost. If you want to control remotely, you need to change the uri line in LJ.js. - Live WebUI extras : change debug level, restart plugin, rescan DACs,... - Status update every 0.5 seconds : every etherdream DAC state, number of buffer points sent,... - "Optimisation" points automatically added, can be changed live for glitch art. Search "resampler" commands. @@ -53,7 +45,7 @@ Important : for best performance LJ is meant to run in a dedicated computer espe # Scenes and pointlists. # -![Scenes](https://www.teamlaser.tk/lj/images/scenes.png) +![Scenes](https://www.teamlaser.fr/lj/images/scenes.png) LJ accept up to 4 groups = virtual "scenes" of 4 "pointlists" each (= one pointlist per laser), so up to 16 pointlists can be sent to redis at anytime from anywhere in the network. The idea behind this is to easily share actual lasers. Imagine in demo party : @@ -86,7 +78,6 @@ LJ is in dev : versions in this repository will always be core functionnal : acc - Linux Buster : in LJ directory, type in a terminal window : cd server - ./install.sh @@ -214,7 +205,7 @@ Dest1 = lj.DestObject('1', 1, True, 0 , 1, 1) Dest1 will also send layer 0 points to scene 1, laser 1 -![Layers](https://www.teamlaser.tk/lj/images/layer.png) +![Layers](https://www.teamlaser.fr/lj/images/layer.png) 2/ Different layers to different lasers ? @@ -269,14 +260,10 @@ DrawDests() will take care of all your declared drawn elements/"objects" and Des # Nannou etherdeam simulator aka visualiser # -Nannou visualiser kind of emulate an etherdream and display in a window what a real laser draws. - -2 compiled nannou visualisers are included, one for Linux, one for macOS. It's pretty old versions but much more compatible with "old" processors/computer, as you may want to repurpose an old computer to run LJ. +2 compiled nannou visualisers are included, one for Linux, one for macOS. It's pretty old version but much more compatible with "old" processors/computer. To use this visualiser as one of LJ's lasers, in LJ.conf edit one of line ip = someipaddress with the IP of the computer running the visualiser. Relaunch LJ. One visualiser per computer. -Nannou visualiser emulation is better and better but one can find a few known non-working situations. See it's github repository (https://github.com/nannou-org/ether-dream/tree/master/dac-emulator) for more recent versions. - # # Todo # @@ -304,19 +291,17 @@ Our "always working solution", as we regularly move our gear for different venue - Again, even if etherdreams are 100 Mbits, we use *gigabits* gear. -By default LJ listen on all network interfaces (0.0.0.0) : +By default LJ uses on 127.0.0.1 (localhost) : +- A websocket on port 9001 for WebUI interaction. - The redis server on port 6379 ('ljayserverip'). - An OSC server on port 8002 for remote control via OSC and plugins. - Some OSC clients defined in LJ.conf to forward commands to defined plugins. -Obviously WebUI pages needs your LJ computer IP to connect to (websocket on port 9001). - -You need to update LJ.conf to your network/etherdreams IPs (using configure script) and be sure to check command arguments : python3 main.py --help - -The need for a dedicated computer to act as "laser server" usually depends on how many lasers you want to control and your main computer load. If you seen flickering with small point lists, try the dedicated computer idea and/or stop non laser activities or cpu intensive task like face tracking. WebUI can be open on another computer/tablet/phone. +You need to update LJ.conf to your network/etherdreams IPs and be sure to check command arguments : python3 main.py --help +The need for a dedicated computer to act as "laser server" usually depends on how many lasers you want to control and your main computer load. If you seen flickering with small point lists, try the dedicated computer idea and/or stop process interfering like redis monitoring,... # # Glitch art @@ -335,7 +320,7 @@ For glitching experience you can change resampling strategy live with "resampler # Colors # -LJ is compatible with TLL and analog modulation. Each point color is an int value, wich is simply the hex color in decimal. Example : white = #ffffff = 16777215. +LJ is compatible with TLL and analog modulation. Each point color is an int value, wich is simply the hex color in decimal. Example : white = #fffff = 65535. # # Ether dream DAC @@ -364,11 +349,9 @@ About hardware setup, especially if you have several lasers : ILDA cables are in # Ethertools directory # -2 useful and *always working tools* from j4cdac github repository : sitter and talk. -- Sitter will display all etherdreams available on the network and their state (playing, idle,...). python sitter.py or use the compiled version (for macOS). May need tkinter : -pip3 install tk -+/- : sudo apt install python-tk -- Talk : will draw a 4 colors square. Try : python3 talk3.py -h +2 useful and always working tools from j4cdac github repository : sitter and talk +- Sitter will display all real etherdreams available on the network and their state (playing, idle,...). python sitter.py or use the compiled version (for macOS). +- Talk : will draw a 4 colors square. python3 talk3.py # # Links @@ -380,38 +363,12 @@ Generic : ![LJ website](https://www.teamlaser.tk/lj) -![Interactive lasers](https://www.teamlaser.tk/lj/images/display.png) +![Interactive lasers](https://www.teamlaser.fr/lj/images/display.png) ![Laser Faq](https://www.repairfaq.org/sam/lasersam.htm) -![Etherdream protocol](https://ether-dream.com/protocol.html) - There is a nice websocket debug tool : websocat. -# -# Troubleshooting -# - -Try these steps in this order ; - -- Use talk3 in ethertools directory : this ensure your computer can connect to the etherdream. See ethertools chapter in this readme. If talk3 doesn't works, check the hardware, connections,... - -python3 talk3.py -i etherdreamIP - -- You should see "connected to yourLJserverIP" on webUI. If not : LJ is not started / reload webpage / your network configuration is bad / a wrong IP in the configure parameters : python3 configure.py. - -- Switch to simu page. If you don't see anything : check redis server or your points in redis doesn't respect pointlist formatting (see command reference). - -- If talk3 works but you don't see your points : click on the Grid icon in Align page. This will override your pointlist and display squares. If Grid works : recomputed points by tracers are "bad" with given values in LJ.conf. - -"Bad points" ? - -- too small movement : some lasers (with small angle like 40°) won't display anything if zoomx/zoomy are too small. Increase zoomx / zoomy in LJ.conf. Try 50-100 values. -- off center : check in LJ.conf centerX and centerY. Reset them to 0. -- not enough points. - -*Don't kill your scanners : becareful with kpps setting.* - # # LJ commands reference # @@ -424,26 +381,25 @@ All these commands are available via OSC (port 8002) or websocket (port 9001) Use the same syntax if you send your pointlist directly in redis : "/pl/0/0" is the key and value is "[(150.0,..." -Every point must be : (x,y,color). Color is the hex color like #FFFFFF in decimal. For new laserist : if point A is green and next point B is red, line AB will be red. +Every point must be : (x,y,color). Color is the hex color #FFFFFF in decimal. -/scale/X/lasernumber value (0-200) +/scale/X/lasernumber value -/scale/Y/lasernumber value (0-200) +/scale/Y/lasernumber value /swap/X/lasernumber value (0 or 1) /swap/Y/lasernumber value (0 or 1) -/angle/lasernumber value : angle correction for given laser by value (0-360) +/angle/lasernumber value : increase/decrease angle correction for given laser by value -/loffset/X/lasernumber value : change X offset of given laser to value (-32000/32000) +/loffset/X/lasernumber value : change X offset of given laser by value -/loffset/Y/lasernumber value : change Y offset of given laser to value (-32000/32000) +/loffset/Y/lasernumber value : change Y offset of given laser by value /kpps/lasernumber value : live change of kpps - /intens/lasernumber value : increase/decrease intensity for given laser by value. Needs analog modulation laser @@ -459,7 +415,7 @@ Every point must be : (x,y,color). Color is the hex color like #FFFFFF in decima /resampler/lasernumber lsteps : change resampling strategy (see glitch art), for given laser lsteps is a string like "[ (1.0, 8),(0.25, 3), (0.75, 3), (1.0, 10)]" -/scene/scenenumber/start 1 : tell all tracers to use given scene +/scene/scenenumber/start 0 or 1 : tell all tracers to use given scene /regen : regen webui index html page. @@ -477,7 +433,7 @@ and second line (/line1 or /redline1). Examples of "uicommand arg" : /redline1 Error -![LJ Display](https://www.teamlaser.tk/lj/images/display.png) +![LJ Display](https://www.teamlaser.fr/lj/images/display.png) Leds colors for each DACs : @@ -500,6 +456,11 @@ FULL -> orange INVALID -> yellow +# +# LJ python3 plugin command reference +# + +See beginning of lj23layers.py in libs3 -![LJ](https://www.teamlaser.tk/lj/images/calig.png) \ No newline at end of file +![LJ](https://www.teamlaser.fr/lj/images/calig.png) \ No newline at end of file diff --git a/libs3/lj23layers.py b/libs3/lj23layers.py index 6c1bdff..a55a11b 100644 --- a/libs3/lj23layers.py +++ b/libs3/lj23layers.py @@ -27,8 +27,8 @@ Basic Draw : High level draw : -- Text(word, integercolor, layer , xpos, ypos, resize, rotx, roty, rotz) : Display a word -- TextRGB(word, red, green, blue, ...) +- Text(word, zpos, integercolor, layer , xpos, ypos, resize, rotx, roty, rotz) : Display a word +- TextRGB(word, zpos, red, green, blue, ...) - Embeded font1 @@ -582,6 +582,8 @@ def rPolyLineOneColor(xy_list, c, layer , closed, xpos = 0, ypos =0, resize =0.7 for xy in xy_list: if xy0 is None: xy0 = xy + #if xy == (338.8, -20, 16777215) or xy == (338.8, -20, 255): + # print(xy, xy0, xpos, ypos, resize, rotx, roty, rotz, Pointransf(xy0, xpos, ypos, resize, rotx, roty, rotz)) LineTo(Pointransf(xy0, xpos, ypos, resize, rotx, roty, rotz), 0, layer ) LineTo(Pointransf(xy0, xpos, ypos, resize, rotx, roty, rotz), c, layer ) else: @@ -955,7 +957,7 @@ def CharDots(char,color): dots.append((dot[0],dot[1],color)) return dots -def Text(message, c, layer, xpos, ypos, resize, rotx, roty, rotz): +def Text(message, zpos, c, layer, xpos, ypos, resize, rotx, roty, rotz): dots =[] @@ -985,15 +987,14 @@ def Text(message, c, layer, xpos, ypos, resize, rotx, roty, rotz): #dots.append((char_layer_list[0][0] + x_offset,char_layer_list[0][1],0)) for xy in char_layer_list: - char_draw.append((xy[0] + x_offset,xy[1],c)) - i +=1 - print(ch, c, xpos, ypos, resize, char_draw) + char_draw.append((xy[0] + x_offset,xy[1], zpos)) + i +=1 rPolyLineOneColor(char_draw, c, layer , False, xpos, ypos, resize, rotx, roty, rotz) #dots.append(char_draw) -def TextRGB(message,c, layer, xpos, ypos, resize, rotx, roty, rotz): +def TextRGB(message, zpos, c, layer, xpos, ypos, resize, rotx, roty, rotz): - Text(message,int('0x%02x%02x%02x' % (red,green,blue),0), layer, xpos, ypos, resize, rotx, roty, rotz) + Text(message, zpos, int('0x%02x%02x%02x' % (red,green,blue),0), layer, xpos, ypos, resize, rotx, roty, rotz) diff --git a/main.py b/main.py index 1b20592..acaefe9 100755 --- a/main.py +++ b/main.py @@ -57,10 +57,8 @@ from multiprocessing import Process, set_start_method import random, ast from libs3 import plugins - from libs3 import tracer3 as tracer from libs3 import homographyp, commands, font1 -#from webui import build #import subprocess @@ -383,7 +381,15 @@ midi.InConfig() midi.OutConfig() ''' -# Creating a startup point list for each laser : 0,1,2,... +def fff(name): + print() + print('HELLO', name ) #indent + print() + + +# +# Create a startup point list for each laser : 0,1,2,... +# print("") log.info("Creating startup point lists...") @@ -397,7 +403,7 @@ for sceneid in range(0,gstt.MaxScenes+1): print("Scene "+ str(sceneid)) #digit_points = font1.DigitsDots(sceneid,65280) - # Order all lasers to show the laser client number at startup -> tell all 4 laser process to USER PLs + # Order all lasers to show its number at startup -> tell all 4 laser process to USER PLs for laserid in range(0,gstt.LaserNumber): digit_points = font1.DigitsDots(laserid,65280) @@ -408,15 +414,11 @@ for sceneid in range(0,gstt.MaxScenes+1): r.set('/order/'+str(laserid), 0) + # # Starts one DAC process per requested Laser # -def fff(name): - print() - print('HELLO', name ) #indent - print() - if __name__ == '__main__': # Bug in 3.8.4 MacOS default multiprocessing start method is spawn. Spawn doesn't work properly @@ -437,7 +439,7 @@ if __name__ == '__main__': log.info("Starting "+str(gstt.LaserNumber) + " DACs process...") - # Launch one process (a newdacp instance) by etherdream + # Launch one process (a tracer3 instance) by etherdream dac_worker0= Process(target=dac_process, args=(0,0,)) dac_worker0.start() commands.worker0 = dac_worker0 @@ -461,14 +463,12 @@ if __name__ == '__main__': commands.worker3 = dac_worker3 dac_worker3.start() print("") - #def Run(): # - # Main loop do nothing. Maybe do the webui server ? + # start WS and OSC servers # try: - #while True: # Websocket startup wserver = WebsocketServer(wsPORT,host=serverIP) @@ -509,6 +509,8 @@ if __name__ == '__main__': print("") log.infog("LJ server running...") + # websocket loop + wserver.run_forever() @@ -521,28 +523,7 @@ if __name__ == '__main__': finally: commands.LJautokill() - ''' - dac_worker0.join() - if lasernumber >0: - dac_worker1.join() - if lasernumber >1: - dac_worker2.join() - if lasernumber >2: - dac_worker3.join() - - - for laserid in range(0,lasernumber+1): - print("Laser",laserid,"feedbacks resetting...") - r.set('/lack/'+str(laserid),64) - r.set('/lstt/'+str(laserid),64) - r.set('/cap/'+str(laserid),0) - ''' - - - - #if __name__ == "__main__": - # Run() - + ''' Some code previously used, for reference : diff --git a/plugins/aurora/anim.py b/plugins/aurora/anim.py index 69989d5..0557da9 100644 --- a/plugins/aurora/anim.py +++ b/plugins/aurora/anim.py @@ -22,6 +22,7 @@ import live ljpath = r'%s' % os.getcwd().replace('\\','/') # import from shell sys.path.append(ljpath +'/../../libs3/') +sys.path.append(ljpath +'/../../libs3') sys.path.append(ljpath +'/../libs3/') #import from LJ @@ -29,7 +30,6 @@ sys.path.append(ljpath +'/libs3/') sys.path.append('../libs3') -sys.path.append(ljpath +'/../../libs3') import lj23layers as lj import gstt @@ -321,7 +321,7 @@ def Circle(LAY): def Word(LAY): - lj.Text(LAY['word'], c = LAY['color'], layer = LAY['number'], xpos = 300, ypos = 300, resize = LAY['scale']*20, rotx = LAY['Xrotdirec'], roty = LAY['Yrotdirec'], rotz = LAY['Zrotdirec']) + lj.Text(LAY['word'], zpos=0, c = LAY['color'], layer = LAY['number'], xpos = 300, ypos = 300, resize = LAY['scale']*0.6, rotx = LAY['Xrotdirec'], roty = LAY['Yrotdirec'], rotz = LAY['Zrotdirec']) #lj.Text(LAY['word'], c = LAY['color'], layer = LAY['number'], xpos = LAY['Xcoord'], ypos = LAY['Ycoord'], resize = LAY['scale']*10, rotx = LAY['Xrotdirec'], roty = LAY['Yrotdirec'], rotz = LAY['Zrotdirec']) #lj.rPolyLineOneColor([(x/2,y/2),((x+1)/2,(y+1)/2)], c = LAY['color'], layer = l, xpos = 0, ypos = 0, resize = LAY['scale'], rotx = LAY['Xrotdirec'], roty = LAY['Yrotdirec'], rotz = LAY['Zrotdirec']) #lj.rPolyLineOneColor([(x/2,y/2,0),((x+1)/2,(y+1)/2,0)], c = z2color(Field['stars'][starnumber][2], LAY['color']), layer = LAY['number'], closed = False, xpos = -200, ypos = 0, resize = LAY['scale'], rotx = LAY['Xrotdirec'], roty = LAY['Yrotdirec'], rotz = LAY['Zrotdirec']) diff --git a/plugins/aurora/aurora.py b/plugins/aurora/aurora.py index 14835d0..6153860 100644 --- a/plugins/aurora/aurora.py +++ b/plugins/aurora/aurora.py @@ -179,9 +179,9 @@ print() log.infog("Aurora v0.1b") OSCinPort = 8090 -ljscene = 1 +ljscene = 0 -StartFXs = ["anim.Word", "anim.Word","anim.Starfield","anim.Starfield"] +StartFXs = ["anim.Trckr","anim.Starfield","anim.Starfield", "anim.Word"] # Useful variables init. white = lj.rgb2int(255,255,255) @@ -191,7 +191,7 @@ green = lj.rgb2int(0,255,0) cyan = lj.rgb2int(255,0,255) yellow = lj.rgb2int(255,255,0) -StartColors = [blue, blue, green, red] +StartColors = [white, white,white, white] screen_size = [700,700] xy_center = [screen_size[0]/2,screen_size[1]/2] @@ -291,7 +291,7 @@ for l in range(lasernumber): 'scandots': 64, 'scale': 45, 'color': white, "run": False, 'intensity': 255, 'closed': False, 'lineSize': 64, 'radius': 45, 'wavefreq': 3, - 'word': "Sonoptik", + 'word': "SonoptiK", 'step': 0, 'steps': 60, 'stepmax': 60, 'stepvals': [], 'Xtransamt': 0, 'Ytransamt': 0, 'Ztransamt': 0, 'Xtranspeed': 0, 'Ytranspeed': 0, 'Ztranspeed': 0, @@ -366,6 +366,7 @@ def OSChandler(path, tags, args, source): oscaddress = ''.join(path.split("/")) #print() print("Aurora default OSC Handler : " + str(path) + " from Client : " + str(source[0])) + #print(args) if len(args) > 0: pass @@ -453,7 +454,7 @@ def OSChandler(path, tags, args, source): if debug != 0: print("Aurora default OSC got trckr frame", args[1], "for layer", args[0], "with path", path) print(len(args),"args", args) - + counter =0 ''' @@ -463,10 +464,10 @@ def OSChandler(path, tags, args, source): TrckrPts.append([float(args[dot]), float(args[dot+1])]) ''' - TrckrPts[args[0]] = [] + TrckrPts[int(args[0])] = [] for dot in range(2,len(args)-1,2): - TrckrPts[args[0]].append([float(args[dot]), float(args[dot+1])]) + TrckrPts[int(args[0])].append([float(args[dot]), float(args[dot+1])]) # /aurora/word/layer word