Esempio n. 1
0
def test_LTC(t, fps=30):
    l1 = KBB_util.LTC(t)
    l2 = KBB_util.LTC(t)
    l1.drop_frame_flag = True
    l2.drop_frame_flag = False
    print t
    print l1, l1.frame_number(fps), l1.drop_frame_flag 
    print l2, l2.frame_number(fps), l2.drop_frame_flag 
    print
Esempio n. 2
0
def animateCam(kb_node,
               kbb_file,
               frame_rate=30,
               start_from=None,
               total_frames=None):
    if frame_rate == 24:
        mc.currentUnit(time="film")
    elif frame_rate == 25:
        mc.currentUnit(time="pal")
    elif frame_rate == 30:
        mc.currentUnit(time="ntsc")
    else:
        print "Warning, unsupported frame_rate", frame_rate

    if total_frames == -1:
        total_frames = None

    start_ltc = KBB_util.LTC()
    if start_from is not None:
        start_ltc = KBB_util.LTC(start_from)

    print "STARTING FROM:", start_ltc, start_from

    if ROOT_DIR is not None:
        kbb_file = os.path.join(ROOT_DIR, kbb_file)
    try:
        kbb = KBB.KBB_factory(kbb_file)
    except IOError:
        print "ERROR, couldn't open file '%s'" % kbb_file
        return
    print kbb
    ##############kbb.set_index(0)
    first_tc_idx = 0
    while kbb.read_next():
        if kbb.packet.header.msg_class == KBB_types.CLASS_DATA:
            if kbb.packet.ltc_frame.hours != 0 or kbb.packet.ltc_frame.minutes != 0 or kbb.packet.ltc_frame.seconds != 0 or kbb.packet.ltc_frame.frames != 0:
                break
        first_tc_idx += 1
    print "First TC index:", first_tc_idx, kbb.packet.ltc_frame
    skip_item = None
    ypr = []
    skipping = True
    start_frame = kbb.packet.ltc_frame.frame_number(frame_rate)
    frame_count = 0
    first_frame = None
    while kbb.read_next():
        if KBB_util.LTC_LT(kbb.packet.ltc_frame, start_ltc):
            continue

        if first_frame is None:
            first_frame = kbb.packet.ltc_frame.frame_number(frame_rate)
        skipping = False
        #print kbb.header.msg_num, kbb.ltc_frame, frame, frames
        if kbb.packet.ltc_frame.frames != skip_item:
            if frame_count % 100 == 0:
                print kbb.packet.msg_num, kbb.packet.ltc_frame, frame_count
            skip_item = kbb.packet.ltc_frame.frames
            frame = kbb.packet.ltc_frame.frame_number(
                frame_rate) - first_frame + 1
            mc.setKeyframe(kb_node,
                           attribute="tc_h",
                           time=frame,
                           value=kbb.packet.ltc_frame.hours)
            mc.setKeyframe(kb_node,
                           attribute="tc_m",
                           time=frame,
                           value=kbb.packet.ltc_frame.minutes)
            mc.setKeyframe(kb_node,
                           attribute="tc_s",
                           time=frame,
                           value=kbb.packet.ltc_frame.seconds)
            mc.setKeyframe(kb_node,
                           attribute="tc_f",
                           time=frame,
                           value=kbb.packet.ltc_frame.frames)
            mc.setKeyframe(kb_node,
                           attribute="msg_num",
                           time=frame,
                           value=kbb.packet.msg_num)
            for i in range(len(ypr)):
                sub_frame = float(i + 1) / (float(len(ypr))) + (frame - 1)
                #print "\t", kbb.header.msg_num, kbb.ltc_frame, frame, sub_frame
                if is_sane(ypr[i].yaw):
                    mc.setKeyframe(kb_node,
                                   attribute="ry",
                                   time=sub_frame,
                                   value=-ypr[i].yaw)
                if is_sane(ypr[i].pitch):
                    mc.setKeyframe(kb_node,
                                   attribute="rx",
                                   time=sub_frame,
                                   value=ypr[i].pitch)
                if is_sane(ypr[i].roll):
                    mc.setKeyframe(kb_node,
                                   attribute="rz",
                                   time=sub_frame,
                                   value=180.0 - ypr[i].roll)
            ypr = []
            frame_count += 1
            if total_frames is not None:
                if frame_count > total_frames:
                    break
        else:
            ypr.append(kbb.packet.vnav)
    end_frame = kbb.packet.ltc_frame.frame_number(frame_rate)

    # get rid of the full-path using mc.ls()
    mc.filterCurve("%s_rotateY" % mc.ls(kb_node)[0])
    mc.filterCurve("%s_rotateX" % mc.ls(kb_node)[0])
    mc.filterCurve("%s_rotateZ" % mc.ls(kb_node)[0])
    mc.keyTangent("%s_rotateY" % mc.ls(kb_node)[0], outTangentType="linear")
    mc.keyTangent("%s_rotateX" % mc.ls(kb_node)[0], outTangentType="linear")
    mc.keyTangent("%s_rotateZ" % mc.ls(kb_node)[0], outTangentType="linear")

    mc.playbackOptions(minTime=0, maxTime=(end_frame - first_frame + 1))