import numpy as np
import os
import pinocchio as pin
from mlp.utils.util import discretizeCurve, discretizeSE3CurveTranslation, discretizeDerivateCurve
import matplotlib
matplotlib.use("Qt4agg")
import matplotlib.pyplot as plt
from multiprocessing import Process
from mlp.utils.requirements import Requirements
pin.switchToNumpyArray()
plt.ioff()


def show(plt):
    plt.show()


def show_non_blocking(plt):
    p = Process(target=show, args=([plt]))
    p.start()


def addVerticalLineContactSwitch(cs, plt, linestyle="-.", color='k'):
    for phase in cs.contactPhases:
        plt.axvline(phase.timeFinal, linestyle=linestyle, color=color)


def plotEffectorTrajectoryWithReference(cs_ref, cs, dt):
    labels = [
        "x (m)", "y (m)", "z (m)", "dx (m/s)", "dy (m/s)", "dz (m/s)",
        "ddx (m/s^2)", "ddy (m/s^2)", "ddz (m/s^2)"
import sys
from os.path import dirname, exists, join

import numpy as np
import pinocchio
from pinocchio.robot_wrapper import RobotWrapper

pinocchio.switchToNumpyArray()


def getModelPath(subpath, printmsg=False):
    paths = [
        join(dirname(dirname(dirname(dirname(__file__)))), 'robots'),
        join(dirname(dirname(dirname(__file__))), 'robots')
    ]
    try:
        from .path import EXAMPLE_ROBOT_DATA_MODEL_DIR
        paths.append(EXAMPLE_ROBOT_DATA_MODEL_DIR)
    except ImportError:
        pass
    paths += [
        join(p, '../../../share/example-robot-data/robots') for p in sys.path
    ]
    for path in paths:
        if exists(join(path, subpath.strip('/'))):
            if printmsg:
                print("using %s as modelPath" % path)
            return path
    raise IOError('%s not found' % subpath)