599 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			599 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/python2.7
 | |
| # -*- coding: utf-8 -*-
 | |
| # -*- mode: Python -*-
 | |
| 
 | |
| '''
 | |
| Laser Jaying
 | |
| 
 | |
| LICENCE : CC
 | |
| Sam Neurohack, Loloster, 
 | |
| 
 | |
| Openpose json files animations
 | |
| 
 | |
| Set for amiral castle :
 | |
| 
 | |
| Curve 0 : Mapping
 | |
| Curve 1 : Pose align on Laser 0 for the moment
 | |
| Curve 2 : Faces
 | |
| Curve 3 : Dancers
 | |
| 
 | |
| '''
 | |
| 
 | |
| 
 | |
| import math
 | |
| import gstt
 | |
| from globalVars import *
 | |
| import bhoroscp
 | |
| import colorify
 | |
| import numpy as np
 | |
| import pdb
 | |
| import time
 | |
| from datetime import datetime
 | |
| import settings
 | |
| 
 | |
| 
 | |
| # For Mapping()
 | |
| # dedicated settings handler is in settings.py
 | |
| import pygame
 | |
| 
 | |
| f_sine = 0
 | |
| 
 | |
| 
 | |
| 
 | |
| # Curve 0
 | |
| # Edit shape mode / Run Mode
 | |
| 
 | |
| def MappingConf(section):
 | |
|     global mouse_prev, sections
 | |
| 
 | |
|     print ""
 | |
|     print "For Mapping(), reading Architecture Points"
 | |
|     gstt.EditStep = 0
 | |
|     gstt.CurrentWindow = -1
 | |
|     gstt.CurrentCorner = 0
 | |
|     gstt.CurrentSection = section
 | |
|     mouse_prev = ((405, 325), (0, 0, 0))
 | |
| 
 | |
|     # Get all shapes points (="corners") for the given section of the conf file -> gstt.Windows 
 | |
|     gstt.Windows = [] 
 | |
|     sections = settings.MappingSections()
 | |
| 
 | |
|     print "" 
 | |
|     #print "Sections : ", sections
 | |
|     print "Reading Section : ", sections[gstt.CurrentSection]
 | |
| 
 | |
|     gstt.Laser = settings.MappingRead([sections[gstt.CurrentSection],'laser'])
 | |
|     print "Laser : ", gstt.Laser
 | |
|     gstt.simuPL = gstt.Laser
 | |
| 
 | |
|     for Window in xrange(settings.Mapping(sections[gstt.CurrentSection])-1):
 | |
|         print "Reading option :  ", str(Window)
 | |
|         shape = [sections[gstt.CurrentSection], str(Window)]
 | |
|         WindowPoints = settings.MappingRead(shape)
 | |
|         gstt.Windows.append(WindowPoints)
 | |
| 
 | |
|     print "Section points : " ,gstt.Windows
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| # section 0 is "General", then first screen shapes in section 1
 | |
| # Todo : Should search automatically first screen in settings file sections.
 | |
| # MappingConf(1) should be call only if curve 0 is selected 
 | |
| 
 | |
| 
 | |
| def Mapping(fwork, keystates, keystates_prev):
 | |
|     global mouse_prev, sections
 | |
| 
 | |
|     PL = gstt.Laser
 | |
|     dots = []
 | |
| 
 | |
|     #switch to edit mode Key E ?
 | |
|     if keystates[pygame.K_e] and not keystates_prev[pygame.K_e] and gstt.EditStep == 0:
 | |
|             print "Switching to Edit Mode"
 | |
|             gstt.EditStep = 1
 | |
|             gstt.CurrentWindow = 0
 | |
|             gstt.CurrentCorner = 0
 | |
| 
 | |
|     # Back to normal if ENTER key is pressed ?
 | |
|     if keystates[pygame.K_RETURN] and gstt.EditStep == 1:    
 | |
|             
 | |
|             print "Switching to Run Mode"
 | |
|             gstt.EditStep =0
 | |
| 
 | |
| 
 | |
| 
 | |
|     # EDIT MODE : cycle windows if press e key to adjust corner position 
 | |
|     # Escape edit mode with enter key
 | |
|     if gstt.EditStep >0:
 | |
| 
 | |
|         dots = []
 | |
|         CurrentWindowPoints = gstt.Windows[gstt.CurrentWindow]
 | |
| 
 | |
|         # Draw all windows points or "corners"
 | |
|         for corner in xrange(len(CurrentWindowPoints)):   
 | |
|             dots.append(proj(int(CurrentWindowPoints[corner][0]),int(CurrentWindowPoints[corner][1]),0))
 | |
|         fwork.PolyLineOneColor( dots, c=colorify.rgb2hex(gstt.color), PL = PL, closed = False )
 | |
| 
 | |
|         # Left mouse is clicked, modify current Corner coordinate
 | |
|         if gstt.mouse[1][0] == mouse_prev[1][0] and mouse_prev[1][0] == 1:
 | |
|             deltax = gstt.mouse[0][0]-mouse_prev[0][0]
 | |
|             deltay = gstt.mouse[0][1]-mouse_prev[0][1]
 | |
|             CurrentWindowPoints[gstt.CurrentCorner][0] += (deltax *2)
 | |
|             CurrentWindowPoints[gstt.CurrentCorner][1] -= (deltay * 2)
 | |
| 
 | |
|         # Change corner if Z key is pressed.
 | |
|         if keystates[pygame.K_z] and not keystates_prev[pygame.K_z]:
 | |
|             if gstt.CurrentCorner < settings.Mapping(sections[gstt.CurrentSection]) - 1:
 | |
|                 gstt.CurrentCorner += 1
 | |
|                 print "Corner : ", gstt.CurrentCorner
 | |
| 
 | |
|         # Press E inside Edit mode : Next window 
 | |
|         if keystates[pygame.K_e] and not keystates_prev[pygame.K_e]:
 | |
| 
 | |
|             # Save current Window and switch to the next one.
 | |
|             if gstt.CurrentWindow < settings.Mapping(sections[gstt.CurrentSection]) -1:
 | |
|                 print "saving "
 | |
|                 settings.MappingWrite(sections,str(gstt.CurrentWindow),CurrentWindowPoints)
 | |
|                 gstt.CurrentWindow += 1
 | |
|                 gstt.CurrentCorner = -1
 | |
|                 if gstt.CurrentWindow == settings.Mapping(sections[gstt.CurrentSection]) -1:
 | |
|                     gstt.EditStep == 0
 | |
|                     gstt.CurrentWindow = 0              
 | |
|                 print "Now Editing window ", gstt.CurrentWindow
 | |
| 
 | |
|         mouse_prev = gstt.mouse
 | |
|         gstt.PL[PL] = fwork.LinesPL(PL)
 | |
| 
 | |
|     # Press A : Next section ?
 | |
|     if keystates[pygame.K_a] and not keystates_prev[pygame.K_a]: 
 | |
|             
 | |
|         print "current section : ", gstt.CurrentSection
 | |
|         if gstt.CurrentSection < len(sections)-1:
 | |
|             gstt.CurrentSection += 1
 | |
|             print "Next section name is ", sections[gstt.CurrentSection]
 | |
|             if "screen" in sections[gstt.CurrentSection]:
 | |
|                 print ""
 | |
|                 print "switching to section ", gstt.CurrentSection, " ", sections[gstt.CurrentSection]
 | |
|                 MappingConf(gstt.CurrentSection)
 | |
|         else:
 | |
|              gstt.CurrentSection = -1
 | |
|         
 | |
| 
 | |
|     # RUN MODE
 | |
|     if gstt.EditStep == 0:
 | |
|         
 | |
|         # Add all windows to PL for display
 | |
|         for Window in gstt.Windows:  
 | |
| 
 | |
|             dots = []
 | |
|             for corner in xrange(len(Window)):   
 | |
|                 #print "Editing : ", WindowPoints[corner]
 | |
|                 #print Window[corner][0]
 | |
|                 dots.append(proj(int(Window[corner][0]),int(Window[corner][1]),0))
 | |
|             
 | |
|             fwork.PolyLineOneColor( dots, c=colorify.rgb2hex(gstt.color), PL = PL, closed = False  )
 | |
|     
 | |
|         gstt.PL[PL] = fwork.LinesPL(PL)
 | |
| 
 | |
| 
 | |
| 
 | |
| # Curve 1 : generic pose animations
 | |
| import json
 | |
| gstt.CurrentPose = 1
 | |
| '''
 | |
| # get absolute body position points
 | |
| def getCOCO(pose_json,pose_points):
 | |
|     
 | |
|     dots = []
 | |
|     for dot in pose_points:
 | |
|         if len(pose_json['part_candidates'][0][str(dot)]) != 0:
 | |
|             dots.append((pose_json['part_candidates'][0][str(dot)][0], pose_json['part_candidates'][0][str(dot)][1]))
 | |
|     return dots
 | |
| 
 | |
| 
 | |
| # get relative (-1 0 1) body position points. a position -1, -1 means doesn't exist
 | |
| def getBODY(pose_json,pose_points):
 | |
| 
 | |
|     dots = []
 | |
|     for dot in pose_points:
 | |
|         #print pose_points
 | |
|         if len(pose_json['people'][0]['pose_keypoints_2d']) != 0:
 | |
|             #print "people 0"
 | |
|             if pose_json['people'][0]['pose_keypoints_2d'][dot * 3] != -1 and  pose_json['people'][0]['pose_keypoints_2d'][(dot * 3)+1] != -1:
 | |
|                 dots.append((pose_json['people'][0]['pose_keypoints_2d'][dot * 3], pose_json['people'][0]['pose_keypoints_2d'][(dot * 3)+1]))
 | |
| 
 | |
|         #if len(pose_json['people']) != 1:
 | |
|             #print "people1"
 | |
|             #print "people 1", pose_json['people'][1]['pose_keypoints_2d']
 | |
|         #print len(pose_json['people'])
 | |
| 
 | |
|     return dots
 | |
| 
 | |
| 
 | |
| # get absolute face position points 
 | |
| def getFACE(pose_json,pose_points):
 | |
| 
 | |
|     dots = []
 | |
|     for dot in pose_points:
 | |
| 
 | |
|         if len(pose_json['people'][0]['face_keypoints_2d']) != 0:
 | |
|             print "people 0"
 | |
|             if pose_json['people'][0]['face_keypoints_2d'][dot * 3] != -1 and  pose_json['people'][0]['face_keypoints_2d'][(dot * 3)+1] != -1:
 | |
|                 dots.append((pose_json['people'][0]['face_keypoints_2d'][dot * 3], pose_json['people'][0]['face_keypoints_2d'][(dot * 3)+1]))
 | |
| 
 | |
|         if len(pose_json['people']) != 1:
 | |
|             print "people 1"
 | |
|             #print "people 1", pose_json['people'][1]['face_keypoints_2d']
 | |
|     return dots
 | |
| 
 | |
| 
 | |
| # Body parts
 | |
| def bodyCOCO(pose_json):
 | |
|     pose_points = [10,9,8,1,11,12,13]
 | |
|     return getBODY(pose_json,pose_points)
 | |
| 
 | |
| def armCOCO(pose_json):
 | |
|     pose_points = [7,6,5,1,2,3,4]
 | |
|     return getBODY(pose_json,pose_points)
 | |
| 
 | |
| def headCOCO(pose_json):
 | |
|     pose_points = [1,0]
 | |
|     return getBODY(pose_json,pose_points)
 | |
| 
 | |
| 
 | |
| # Face keypoints
 | |
| def face(pose_json):
 | |
|     pose_points = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
 | |
|     return getFACE(pose_json,pose_points)
 | |
| 
 | |
| def browL(pose_json):
 | |
|     pose_points = [26,25,24,23,22]
 | |
|     return getFACE(pose_json,pose_points)
 | |
| 
 | |
| def browR(pose_json):
 | |
|     pose_points = [21,20,19,18,17]
 | |
|     return getFACE(pose_json,pose_points)
 | |
| 
 | |
| def eyeR(pose_json):
 | |
|     pose_points = [36,37,38,39,40,41,36]
 | |
|     return getFACE(pose_json,pose_points)
 | |
| 
 | |
| def eyeL(pose_json):
 | |
|     pose_points = [42,43,44,45,46,47,42]
 | |
|     return getFACE(pose_json,pose_points)
 | |
| 
 | |
| def nose(pose_json):
 | |
|     pose_points = [27,28,29,30]
 | |
|     return getFACE(pose_json,pose_points)
 | |
| 
 | |
| def mouth(pose_json):
 | |
|     pose_points = [48,59,58,57,56,55,54,53,52,51,50,49,48,60,67,66,65,64,63,62,61,60]
 | |
|     return getFACE(pose_json,pose_points)
 | |
| 
 | |
| 
 | |
| # best order face : face browL browr eyeR eyeL nose mouth
 | |
| '''
 | |
| 
 | |
| 
 | |
| # get absolute body position points
 | |
| def getCOCO(pose_json,pose_points, people):
 | |
|     
 | |
|     dots = []
 | |
|     for dot in pose_points:
 | |
|         if len(pose_json['part_candidates'][people][str(dot)]) != 0:
 | |
|             dots.append((pose_json['part_candidates'][people][str(dot)][0], pose_json['part_candidates'][people][str(dot)][1]))
 | |
|     return dots
 | |
| 
 | |
| 
 | |
| # get relative (-1 0 1) body position points. a position -1, -1 means doesn't exist
 | |
| def getBODY(pose_json,pose_points, people):
 | |
| 
 | |
|     dots = []
 | |
|     for dot in pose_points:
 | |
|         #print pose_points
 | |
|         if len(pose_json['people'][people]['pose_keypoints_2d']) != 0:
 | |
|             #print "people 0"
 | |
|             if pose_json['people'][people]['pose_keypoints_2d'][dot * 3] != -1 and  pose_json['people'][people]['pose_keypoints_2d'][(dot * 3)+1] != -1:
 | |
|                 dots.append((pose_json['people'][people]['pose_keypoints_2d'][dot * 3], pose_json['people'][people]['pose_keypoints_2d'][(dot * 3)+1]))
 | |
| 
 | |
| 
 | |
|     return dots
 | |
| 
 | |
| 
 | |
| # get absolute face position points 
 | |
| def getFACE(pose_json,pose_points, people):
 | |
| 
 | |
|     dots = []
 | |
|     for dot in pose_points:
 | |
| 
 | |
|         if len(pose_json['people'][people]['face_keypoints_2d']) != 0:
 | |
|             #print "people 0"
 | |
|             if pose_json['people'][people]['face_keypoints_2d'][dot * 3] != -1 and  pose_json['people'][people]['face_keypoints_2d'][(dot * 3)+1] != -1:
 | |
|                 dots.append((pose_json['people'][people]['face_keypoints_2d'][dot * 3], pose_json['people'][people]['face_keypoints_2d'][(dot * 3)+1]))
 | |
|         '''
 | |
|         if len(pose_json['people']) > 1:
 | |
|             print len(pose_json['people']) 
 | |
|             print "people 1 face ", pose_json['people'][1]['face_keypoints_2d']
 | |
|         '''
 | |
| 
 | |
|     return dots
 | |
| 
 | |
| 
 | |
| # Body parts
 | |
| def bodyCOCO(pose_json, people):
 | |
|     pose_points = [10,9,8,1,11,12,13]
 | |
|     return getBODY(pose_json,pose_points, people)
 | |
| 
 | |
| def armCOCO(pose_json, people):
 | |
|     pose_points = [7,6,5,1,2,3,4]
 | |
|     return getBODY(pose_json,pose_points, people)
 | |
| 
 | |
| def headCOCO(pose_json, people):
 | |
|     pose_points = [1,0]
 | |
|     return getBODY(pose_json,pose_points, people)
 | |
| 
 | |
| 
 | |
| # Face keypoints
 | |
| def face(pose_json, people):
 | |
|     pose_points = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
 | |
|     return getFACE(pose_json,pose_points, people)
 | |
| 
 | |
| def browL(pose_json, people):
 | |
|     pose_points = [26,25,24,23,22]
 | |
|     return getFACE(pose_json,pose_points, people)
 | |
| 
 | |
| def browR(pose_json, people):
 | |
|     pose_points = [21,20,19,18,17]
 | |
|     return getFACE(pose_json,pose_points, people)
 | |
| 
 | |
| def eyeR(pose_json, people):
 | |
|     pose_points = [36,37,38,39,40,41,36]
 | |
|     return getFACE(pose_json,pose_points, people)
 | |
| 
 | |
| def eyeL(pose_json, people):
 | |
|     pose_points = [42,43,44,45,46,47,42]
 | |
|     return getFACE(pose_json,pose_points, people)
 | |
| 
 | |
| def nose(pose_json, people):
 | |
|     pose_points = [27,28,29,30]
 | |
|     return getFACE(pose_json,pose_points, people)
 | |
| 
 | |
| def mouth(pose_json, people):
 | |
|     pose_points = [48,59,58,57,56,55,54,53,52,51,50,49,48,60,67,66,65,64,63,62,61,60]
 | |
|     return getFACE(pose_json,pose_points, people)
 | |
| 
 | |
| import os 
 | |
| 
 | |
| 
 | |
| # Get frame number for pose path describe in gstt.PoseDir 
 | |
| def lengthPOSE(pose_dir):
 | |
| 
 | |
| 
 | |
|     if gstt.debug > 0:
 | |
|       print "Check directory ",'poses/' + pose_dir + '/'
 | |
|     numfiles = sum(1 for f in os.listdir('poses/' + pose_dir + '/') if os.path.isfile(os.path.join('poses/' + pose_dir + '/', f)) and f[0] != '.')
 | |
|     if gstt.debug > 0:
 | |
|       print "Pose : ", pose_dir, numfiles, "images"
 | |
|     return numfiles
 | |
| 
 | |
| 
 | |
| def preparePOSE():
 | |
| 
 | |
|     # anim format (name, xpos,ypos, resize, currentframe, totalframe, count, speed)
 | |
|     # total frames is fetched from directory file count
 | |
|     
 | |
|     anims1 = [['sky',50,100,300,0,0,0,1],['2dancer1', 400,100, 300,0,0,0,1],['1dancer', 400,100, 300,0,0,0,1],['window1',100,100,300,0,0,0,1]]
 | |
|     anims2 = [['window1', 400,200, 300,0,0,0,1],['2dancer1',100,200,300,0,0,0,1]]
 | |
|     
 | |
|     for anim in anims1:
 | |
|         anim[5]= lengthPOSE(anim[0])
 | |
|     gstt.anims0 = anims1
 | |
| 
 | |
| 
 | |
| # display n pose animations on Laser 0
 | |
| def Pose(fwork):
 | |
|    
 | |
|     for anim in gstt.anims0:
 | |
|         PL = 0
 | |
|         dots = []
 | |
|         print anim, anim[5]
 | |
|         # repeat anim[7] time the same frame
 | |
|         anim[6] +=1
 | |
|         if anim[6] == anim[7]:
 | |
| 
 | |
|             anim[6] = 0
 | |
|             # increase current frame and compare to total frame 
 | |
|             anim[4] += 1
 | |
|             if anim[4] == anim[5]:
 | |
|                 anim[4] = 0
 | |
| 
 | |
| 
 | |
|         posename = 'poses/' + anim[0] + '/' + anim[0] +'-'+str("%05d"%anim[4])+'.json'
 | |
|         posefile = open(posename , 'r') 
 | |
|         posedatas = posefile.read()
 | |
|         pose_json = json.loads(posedatas)
 | |
| 
 | |
|         for people in range(len(pose_json['people'])):
 | |
| 
 | |
|             fwork.rPolyLineOneColor(bodyCOCO(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = 0, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             fwork.rPolyLineOneColor(armCOCO(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = 0, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             fwork.rPolyLineOneColor(headCOCO(pose_json, people), c=colorify.rgb2hex(gstt.color),  PL = 0, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
| 
 | |
|             # Face
 | |
|             '''
 | |
|             #fwork.rPolyLineOneColor(face(pose_json, people), c=colorify.rgb2hex(gstt.color),  PL = 0, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             fwork.rPolyLineOneColor(browL(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = 0, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             fwork.rPolyLineOneColor(browR(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = 0, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             fwork.rPolyLineOneColor(eyeR(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = 0, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             fwork.rPolyLineOneColor(eyeL(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = 0, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             fwork.rPolyLineOneColor(nose(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = 0, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])  
 | |
|             fwork.rPolyLineOneColor(mouth(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = 0, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             '''
 | |
| 
 | |
|         gstt.PL[PL] = fwork.LinesPL(PL)
 | |
|         time.sleep(0.02)
 | |
| 
 | |
|     
 | |
|     # decrease current frame 
 | |
|     if gstt.keystates[pygame.K_w]: # and not gstt.keystates_prev[pygame.K_w]:
 | |
|         gstt.CurrentPose -= 1
 | |
|         if gstt.CurrentPose < 2:
 | |
|             gstt.CurrentPose = gstt.numfiles -1
 | |
|         #time.sleep(0.033) 
 | |
|         print "Frame : ",gstt.CurrentPose 
 | |
| 
 | |
|     # increaser current frame
 | |
|     if gstt.keystates[pygame.K_x]: # and not gstt.keystates_prev[pygame.K_x]:
 | |
|         gstt.CurrentPose += 1
 | |
|         if gstt.CurrentPose > gstt.numfiles -1:
 | |
|             gstt.CurrentPose = 1
 | |
|         #time.sleep(0.033)
 | |
|         print "Frame : ",gstt.CurrentPose 
 | |
|     
 | |
| 
 | |
| 
 | |
| # Curve 2 Faces
 | |
| import json
 | |
| gstt.CurrentPose = 1
 | |
| 
 | |
| def prepareFACES():
 | |
| 
 | |
| 
 | |
|     # anim format (name, xpos,ypos, resize, currentframe, totalframe, count, speed)
 | |
|     # total frame is fetched from directory file count
 | |
|     
 | |
|     gstt.anims[0] = [['detroit1', 300,300, 100,0,0,0,1]]
 | |
|     gstt.anims[1] = [['detroit1', 400,200, 200,0,0,0,1]]
 | |
|     gstt.anims[2] = [['detroit1', 500,200, 300,0,0,0,1]]
 | |
| 
 | |
|     '''
 | |
|     # read anims number of frames from disk.
 | |
|     for anim in range(len(gstt.anims0)):
 | |
|         gstt.anims0[anim][5]= lengthPOSE(gstt.anims0[anim][0])
 | |
|     for anim in range(len(gstt.anims1)):
 | |
|         gstt.anims1[anim][5]= lengthPOSE(gstt.anims1[anim][0])
 | |
|     for anim in range(len(gstt.anims2)):
 | |
|         gstt.anims2[anim][5]= lengthPOSE(gstt.anims2[anim][0])
 | |
|     '''
 | |
| 
 | |
|     for laseranims in range(3):
 | |
|         print laseranims
 | |
|         for anim in range(len(gstt.anims[laseranims])):
 | |
|             gstt.anims[laseranims][anim][5]= lengthPOSE(gstt.anims[laseranims][anim][0])
 | |
| 
 | |
| # display the face animation describe in gstt.PoseDir
 | |
| def Faces(fwork):
 | |
| 
 | |
|   for laseranims in range(3):
 | |
|     for anim in gstt.anims[laseranims]:
 | |
|         PL = laseranims
 | |
|         #print PL, anim
 | |
|         dots = []
 | |
|         #print anim, anim[5]
 | |
|         # repeat anim[7] time the same frame
 | |
|         anim[6] +=1
 | |
|         if anim[6] == anim[7]:
 | |
| 
 | |
|             anim[6] = 0
 | |
|             # increase current frame and compare to total frame 
 | |
|             anim[4] += 1
 | |
|             if anim[4] == anim[5]:
 | |
|                 anim[4] = 0
 | |
| 
 | |
| 
 | |
|         posename = 'poses/' + anim[0] + '/' + anim[0] +'-'+str("%05d"%anim[4])+'.json'
 | |
|         posefile = open(posename , 'r') 
 | |
|         posedatas = posefile.read()
 | |
|         pose_json = json.loads(posedatas)
 | |
| 
 | |
|         # Face
 | |
| 
 | |
|         for people in range(len(pose_json['people'])):
 | |
| 
 | |
|             #fwork.rPolyLineOneColor(face(pose), c=colorify.rgb2hex(gstt.color),  PL = 0, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             fwork.rPolyLineOneColor(browL(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = laseranims, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             fwork.rPolyLineOneColor(browR(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = laseranims, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             fwork.rPolyLineOneColor(eyeR(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = laseranims, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             fwork.rPolyLineOneColor(eyeL(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = laseranims, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             fwork.rPolyLineOneColor(nose(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = laseranims, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])  
 | |
|             fwork.rPolyLineOneColor(mouth(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = laseranims, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|         
 | |
|         gstt.PL[PL] = fwork.LinesPL(PL)
 | |
|         time.sleep(0.02)
 | |
|     
 | |
| # Curve 3
 | |
| # Dancers
 | |
| import json
 | |
| gstt.CurrentPose = 1
 | |
| 
 | |
| def prepareDANCERS():
 | |
| 
 | |
|     # anim format (name, xpos,ypos, resize, currentframe, totalframe, count, speed)
 | |
|     # total frame is fetched from directory file count
 | |
| 
 | |
|     gstt.anims[0] = [['1dancer',500,200,300,0,0,0,10]]
 | |
|     gstt.anims[1] = [['2dancer1',500,200,300,0,0,0,10]]
 | |
|     gstt.anims[2] = [['window1',500,200,300,0,0,0,10]]    
 | |
|     #gstt.anims[1] = [['2dancer1',100,200,300,0,0,0,10]]
 | |
|     #gstt.anims[2] = [['window1',400,200, 300,0,0,0,10]]
 | |
|     # read anims number of frames from disk.
 | |
|     print gstt.anims
 | |
| 
 | |
|     for laseranims in range(3):
 | |
|         print laseranims
 | |
|         for anim in range(len(gstt.anims[laseranims])):
 | |
|             gstt.anims[laseranims][anim][5]= lengthPOSE(gstt.anims[laseranims][anim][0])
 | |
| 
 | |
| # display the pose animation describe in gstt.PoseDir
 | |
| def Dancers(fwork):
 | |
|    
 | |
|     for laseranims in range(3):
 | |
|         for anim in gstt.anims[laseranims]:
 | |
|             PL = laseranims
 | |
|             #print PL, anim
 | |
|             dots = []
 | |
|             #print anim, anim[5]
 | |
|             # repeat anim[7] time the same frame
 | |
|             anim[6] +=1
 | |
|             if anim[6] == anim[7]:
 | |
| 
 | |
|                 anim[6] = 0
 | |
|                 # increase current frame and compare to total frame 
 | |
|                 anim[4] += 1
 | |
|                 if anim[4] == anim[5]:
 | |
|                     anim[4] = 0
 | |
| 
 | |
| 
 | |
|             #bhorosc.sendresol("/layer1/clip1/connect",1)
 | |
|             #bhorosc.sendresol("/layer1/clip1/connect",0)
 | |
| 
 | |
|             posename = 'poses/' + anim[0] + '/' + anim[0] +'-'+str("%05d"%anim[4])+'.json'
 | |
|             posefile = open(posename , 'r') 
 | |
|             posedatas = posefile.read()
 | |
|             pose_json = json.loads(posedatas)
 | |
| 
 | |
| 
 | |
|             for people in range(len(pose_json['people'])):
 | |
|                 fwork.rPolyLineOneColor(bodyCOCO(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = laseranims, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|                 fwork.rPolyLineOneColor(armCOCO(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = laseranims, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
| 
 | |
|                 fwork.rPolyLineOneColor(browL(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = laseranims, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|                 fwork.rPolyLineOneColor(browR(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = laseranims, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|                 fwork.rPolyLineOneColor(eyeR(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = laseranims, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|                 fwork.rPolyLineOneColor(eyeL(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = laseranims, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|                 fwork.rPolyLineOneColor(nose(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = laseranims, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])  
 | |
|                 fwork.rPolyLineOneColor(mouth(pose_json, people), c=colorify.rgb2hex(gstt.color), PL = laseranims, closed = False,xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
| 
 | |
|             
 | |
|             gstt.PL[PL] = fwork.LinesPL(PL)
 | |
| 
 | |
|             '''
 | |
|             fwork.rPolyLineOneColor(bodyCOCO(pose_json), c=colorify.rgb2hex(gstt.color), PL = 0, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             fwork.rPolyLineOneColor(armCOCO(pose_json), c=colorify.rgb2hex(gstt.color), PL = 0, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
|             fwork.rPolyLineOneColor(headCOCO(pose_json), c=colorify.rgb2hex(gstt.color),  PL = 0, closed = False, xpos = anim[1], ypos = anim[2], resize = anim[3])
 | |
| 
 | |
| 
 | |
|             gstt.PL[PL] = fwork.LinesPL(PL)
 | |
|              '''
 |