Exemplo n.º 1
0
def readFile():
    # Pathオブジェクトを生成
    p = Path(vrmapi.SYSTEM().GetLayoutDir() + "\\read")
    l = list(p.glob("*.txt"))
    for item in l:
        try:
            #withでテキスト読み込みモード使用
            with open(item, 'r') as text:
                # 文字列を全て読み込む
                t = text.read()
                # タブで分割
                line = t.split()
                # 要素が0:Object種別、1:ID、2:命令、3:Paramの4つ以上
                if len(line) >= 4:
                    readFileLine(line)
                #vrmapi.LOG(str(t))
            # 読み込んだファイルは別フォルダへ移動
            re = vrmapi.SYSTEM().GetLayoutDir() + "\\read_end\\" + item.name
            #vrmapi.LOG(str(re))
            shutil.move(item, re)
            # 出力機能
            global _sendState
            if _sendState == True:
                sendStateFile()
        except Exception as e:
            # エラーファイルは名前を変えて別フォルダへ移動
            re = vrmapi.SYSTEM().GetLayoutDir(
            ) + "\\read_end\\ERR_" + item.name
            vrmapi.LOG(str(e))
            vrmapi.LOG(str(re))
            shutil.move(item, re)
Exemplo n.º 2
0
def sendStateFile():
    dir = vrmapi.SYSTEM().GetLayoutDir()
    if (os.path.exists(dir + "\\send") == False):
        vrmapi.LOG(dir + "\\send フォルダがありません。")
        return

    s = list()

    # 編成リストを新規編成リストに格納
    tList = vrmapi.LAYOUT().GetTrainList()
    # 新規編成リストから編成を繰り返し取得
    for t in tList:
        # ダミー編成は除外
        if t.GetDummyMode() == False:
            s.append('t\t{0}\t{1:.1f}\n'.format(t.GetID(), t.GetVoltage()))
    s.append('\n')

    # 新規ポイントリストを作成
    pList = list()
    # ポイントリストを新規ポイントリストに格納
    vrmapi.LAYOUT().ListPoint(pList)
    # 新規ポイントリストからポイントを繰り返し取得
    for p in pList:
        # 頭文字「dummy」は対象外
        if p.GetNAME()[0:5] != 'dummy':
            s.append('p\t{0}\t{1}\n'.format(p.GetID(), p.GetBranch()))
    #s.append('\n')

    # 結合
    text = ''.join(s)
    # ファイル出力
    timeText = datetime.now().strftime('%Y%m%d%H%M%S%f')
    path_w = dir + "\\send\\" + timeText + '.txt'
    with open(path_w, mode='w') as f:
        f.write(text)
Exemplo n.º 3
0
def vrmevent(obj, ev, param):
    if ev == 'init':
        # フォルダチェック
        dir = vrmapi.SYSTEM().GetLayoutDir()
        if (os.path.exists(dir + "\\read") == False):
            vrmapi.LOG(dir + "\\read フォルダがありません。ファイル連携機能を無効にします。")
            return
        if (os.path.exists(dir + "\\read_end") == False):
            vrmapi.LOG(dir + "\\read_end フォルダがありません。ファイル連携機能を無効にします。")
            return
        global _sendState
        if _sendState == True:
            if (os.path.exists(dir + "\\send") == False):
                vrmapi.LOG(dir + "\\send フォルダがありません。出力機能を無効にします。")
                # 出力機能無効化
                _sendState = False
                return
            else:
                vrmapi.LOG("出力機能が有効です。")
        # 起動時に0.1秒間隔のタイマーイベントを登録
        obj.SetEventTimer(0.1)
        # (任意)レイアウト内の全編成の電源を一括設定(0:OFF, 1:ON)
        #setPowerAll(0)
        # (任意)sendフォルダにレイアウト初期情報を出力
        sendSettingFile()
    elif ev == 'timer':
        # タイマーイベントでフォルダを周期監視
        readFile()
Exemplo n.º 4
0
def sendSettingFile():
    dir = vrmapi.SYSTEM().GetLayoutDir()
    if (os.path.exists(dir + "\\send") == False):
        vrmapi.LOG(dir + "\\send フォルダがありません。")
        return

    s = list()

    # 編成リストを新規編成リストに格納
    tList = vrmapi.LAYOUT().GetTrainList()
    # 新規編成リストから編成を繰り返し取得
    for t in tList:
        pos = t.GetPosition()
        s.append(
            't\t{0}\t{1}\t{2}\t{3:.0f}\t{4:.0f}\t{5:.0f}\t{6:.0f}\t{7}'.format(
                t.GetID(), t.GetNAME(), t.GetTrainNumber(), pos[0], pos[2],
                pos[1], t.GetRotate(), len(t.GetCarList())))
        if t.GetDummyMode() == True:
            s.append('\tdummy\n')
        else:
            s.append('\n')
    s.append('\n')

    # 新規ポイントリストを作成
    pList = list()
    # ポイントリストを新規ポイントリストに格納
    vrmapi.LAYOUT().ListPoint(pList)
    # 新規ポイントリストからポイントを繰り返し取得
    for p in pList:
        pos = p.GetPosition()
        s.append(
            'p\t{0}\t{1}\t{2}\t{3:.0f}\t{4:.0f}\t{5:.0f}\t{6:.0f}\n'.format(
                p.GetID(), p.GetNAME(), p.GetBranch(), pos[0], pos[2], pos[1],
                p.GetRotate()))
    #s.append('\n')

    # 結合
    text = ''.join(s)
    # ファイル出力
    timeText = datetime.now().strftime('%Y%m%d%H%M%S%f')
    path_w = dir + "\\send\\" + timeText + '.txt'
    with open(path_w, mode='w') as f:
        f.write(text)
        vrmapi.LOG(path_w + " を出力しました。")
Exemplo n.º 5
0
try:
    import vrmapi
    LOG = vrmapi.LOG
except ModuleNotFoundError:
    print('VRMAPIが見つかりません。VRMNXシステムでしか動作しません。')
    raise
from math import sin,cos,tan,sqrt, pi, pow, ceil,floor
from random import triangular
import json
import os.path

DEBUG = False

LAYOUT = vrmapi.LAYOUT()
NXSYS = vrmapi.SYSTEM()
IMGUI = vrmapi.ImGui()
DIRECTORY, BASE = os.path.split(NXSYS.GetLayoutPath())
#LOG(BASE)

# フレームイベントの設定は activate イベントハンドラでinitのタイミングに移動

_PARENT = None  # 親オブジェクト
#_gcam = []     # 地上カメラのリスト
_toruos = []    # 撮る夫くんたちのリスト
_childid = [0]
_systime = 0.0  # 前フレームの時刻を記録
_shakemode = [False] # Trueで手ブレON
_guidisp = 1         # TrueでGUI操作盤を表示
_shake_vt = 0.0      # 手ブレの累積量
_shake_hr = 0.0