Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import struct
- import bpy
- from time import sleep
- sys.path.append("C:\Python33\Lib\site-packages")
- import serial
- import os
- import threading
- import math
- from random import randint
- prev_base = 0
- prev_neck = 0
- prev_twist = 0
- prev_mouth = 0
- prev_r_brow = 0
- prev_l_brow = 0
- is_serial_free = 1
- serial_counter = 0
- def sendSerialCommand(a):
- global is_serial_free
- global serial_counter
- if is_serial_free == 1 :
- is_serial_free = 0
- serialport.write(bytes(a,encoding='ascii'))
- serial_counter = serial_counter+1
- print(a)
- print(serial_counter )
- is_serial_free = 1
- def getAngle(object,axis):
- rotation = bpy.data.objects[object].rotation_euler
- rot = round( rotation[axis] * (180/math.pi) ,0)
- rot += 90 # fix 0 based rotations
- rot = int(rot)
- return rot
- def updateFunc():
- global prev_base
- global prev_neck
- global prev_twist
- global prev_mouth
- global prev_l_brow
- global prev_r_brow
- # set base rotation
- rot = getAngle("base",2) ;
- rot -= 0
- if prev_base != rot:
- prev_base = rot
- sendSerialCommand("a%d\n" % rot)
- # set neck rotation
- rot = getAngle("neck",1) ;
- rot -= 90
- if prev_neck != rot :
- prev_neck = rot
- sendSerialCommand("b%d\n" % rot)
- rot = getAngle("twist",1)
- rot -= 0
- if prev_twist != rot:
- prev_twist = rot
- sendSerialCommand("c%d\n" % rot)
- # set mouth rotation
- rot = getAngle("mouth",0) ;
- if prev_mouth != rot:
- prev_mouth = rot
- sendSerialCommand("d%d\n" % rot)
- # set l.brow rotation
- rot = getAngle("left_brow",1)
- rot-=90
- if prev_l_brow != rot:
- prev_l_brow = rot
- sendSerialCommand("f%d\n" % rot)
- # set r.brow rotation
- rot = getAngle("right_brow",1)
- rot-=90
- if prev_r_brow != rot:
- prev_r_brow = rot
- sendSerialCommand("e%d\n" % rot)
- def scene_update(context):
- if bpy.data.objects.is_updated:
- updateFunc()
- # t1 = threading.Thread(target=threadFunc)
- # t1.start()
- # t1.join()
- # we're ready to go !
- clear = lambda: os.system('cls')
- clear()
- serialport = serial.Serial('COM3', 57600)
- #serialport = None
- bpy.app.handlers.scene_update_post.clear()
- bpy.app.handlers.scene_update_post.append(scene_update)
- sleep(3)
- #################################################################
- #### menu stuff goes here #######################################
- #################################################################
- # create custom menu in tools panel
- # for com port management
- class ToolsPanel(bpy.types.Panel):
- bl_label = "Com Manager"
- bl_space_type = "VIEW_3D"
- bl_region_type = "TOOLS"
- def draw(self, context):
- layout = self.layout
- row = layout.row()
- row.label(text= "base : " + str(prev_base) )
- row = layout.row()
- row.label(text= "neck : " + str(prev_neck) )
- row = layout.row()
- row.label(text= "twist : " + str(prev_twist) )
- row = layout.row()
- row.label(text= "mouth : " + str(prev_mouth) )
- row = layout.row()
- row.label(text= "l.brow : " + str(prev_l_brow) )
- row = layout.row()
- row.label(text= "r.brow : " + str(prev_r_brow) )
- self.layout.operator("com_manager.open", icon='PLAY')
- self.layout.operator("com_manager.close", icon='PANEL_CLOSE')
- # com port management methods for general use by
- # the panel
- class OpenComPort(bpy.types.Operator):
- bl_idname = "com_manager.open"
- bl_label = "Open Com Port"
- def execute(self, context):
- print("open com port")
- serialport = serial.Serial('COM3', 57600)
- return {'FINISHED'}
- class CloseComPort(bpy.types.Operator):
- bl_idname = "com_manager.close"
- bl_label = "Close Com Port"
- def execute(self, context):
- print("close")
- serialport.close() ;
- return {'FINISHED'}
- def register():
- bpy.utils.register_class(OpenComPort)
- bpy.utils.register_class(CloseComPort)
- bpy.utils.register_class(ToolsPanel)
- def unregister():
- bpy.utils.unregister_class(OpenComPort)
- bpy.utils.unregister_class(CloseComPort)
- bpy.utils.unregister_class(ToolsPanel)
- if __name__ == "__main__":
- register()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement