Hatena::Grouprokuro

cx20の日記

はてなロクロ」投稿サンプル
マリオ テトリス デフォルトさん はてなロゴ 全自動マリオ 3Dプロッタ
 | 

2008-02-23はてなロクロ - マウンテン プロッタ

マウンテン プロッタ

| 02:14 |  マウンテン プロッタ - cx20の日記 を含むブックマーク はてなブックマーク -  マウンテン プロッタ - cx20の日記

  • ソース

hatena_rokuro_mountain_plotter.uws [ダウンロード]

hatena_rokuro_mountain_plotter.csv [ダウンロード]

// ---------------------------------------------------------
// File : hatena_rokuro_mountain_plotter.uws
// ---------------------------------------------------------
// <概要>
// ・このスクリプトはWindows 自動化ソフト「UWSC」を使った「はてなロクロ」自動化スクリプトです。
// ・このスクリプトは X, Y, Z の座標を持った CSV ファイルの内容を「はてなロクロ」に書き写すスクリプトです。
// 
// <使用上の注意>
// ・以下の環境でスクリプトの動作確認済みです。
//   ・解像度:1280x1024, Windows 2000 + IE6(ウィンドウ最大化。タスクバーは下に配置)
//   ・解像度:1280x1024, Windows XP(クラシックモード) + IE7(ウィンドウ最大化。タスクバーは下に配置)
//   ・解像度:1280x1024, Windows 2000 + Firefox 2.0(ウィンドウ最大化。タスクバーは下に配置)
//   ・解像度:1280x1024, Windows XP(クラシックモード) + Firefox 2.0(ウィンドウ最大化。タスクバーは下に配置)
// ・実行する場合は「はてなロクロ」の「カメラ」を停止しておいてください。
// ・中断する場合は [Alt] + [F2] です。動作中にウィンドウを切り替えないでください。誤動作します。
//
// <使用ツール>
// ■ UWSC Free版 Ver4.4
// http://www.uwsc.info/download.html
// 
// <スクリプトを作成した人>
// id:cx20
// 
// <変更履歴>
// 2008/02/23 Ver0.01 とりあえず版作成。

Option Explicit

Public g_x = 400 // 描画開始位置
Public g_y = 200 // 描画開始位置
Public g_r = 25  // 円の半径
Public g_pi = 3.14159265 // PI
//Public g_wait = 5 // 実行までの待ち時間(ミリ秒)
Public g_wait = 0 // 実行までの待ち時間(ミリ秒)

// 「はてなロクロ」のウィンドウIDを取得(IE/Firefox 共通版)
Public g_winID_rokuro = 0
g_winID_rokuro = はてなロクロのウィンドウIDを取得()
Ifb g_winID_rokuro = -1 Then
    MsgBox( "はてなロクロが起動していない為、スクリプトを終了します。" )
    ExitExit
EndIf

// 「はてなロクロ」ページをアクティブ化
ACW(g_winID_rokuro)

// ツールボックス開始位置
Public g_toolbox_basic_width = 25
Public g_toolbox_basic_x = 0
Public g_toolbox_basic_y = 0
// 色選択ツール開始位置
Public g_toolbox_color_width = 19
Public g_toolbox_color_x = 0
Public g_toolbox_color_y = 0

はてなロクロのツールボックス位置を算出( g_winID_rokuro )

// <描画サンプル>
CSVデータの内容をはてなロクロで描く

Function はてなロクロのウィンドウIDを取得()
    Dim winID = 0

    // 「はてなロクロ」のウィンドウIDを取得(IE6 版)
    winID = GETID("はてなロクロ - Microsoft Internet Explorer","IEFrame")
    Ifb winID <> -1 Then
        Result = winID
        Exit
    EndIf
    
    // 「はてなロクロ」のウィンドウIDを取得(IE7 版)
    winID = GETID("はてなロクロ - Windows Internet Explorer","IEFrame")
    Ifb winID <> -1 Then
        Result = winID
        Exit
    EndIf

    // 「はてなロクロ」のウィンドウIDを取得(Firefox 版)
    winID = GETID("はてなロクロ - Mozilla Firefox","MozillaUIWindowClass")
    Ifb winID <> -1 Then
        Result = winID
        Exit
    EndIf

    Result = winID
Fend

Procedure はてなロクロのツールボックス位置を算出( winID )

    Dim window_x = Status( winID, ST_X )
    Dim window_y = Status( winID, ST_Y )
    Dim window_height = Status( winID, ST_HEIGHT )
    Print "window_x = [" + window_x + "]"
    Print "window_y = [" + window_y + "]"
    Print "window_height = [" + window_height + "]"
    
    // ツールボックス開始位置
    g_toolbox_basic_x = window_x +  17 + g_toolbox_basic_width * 0
    g_toolbox_basic_y = window_y + window_height - 42
    // 色選択ツール開始位置
    g_toolbox_color_x = window_x + 122 + g_toolbox_color_width * 0
    g_toolbox_color_y = window_y + window_height - 42

Fend

Procedure CSVデータの内容をはてなロクロで描く()

    Dim cn
    Dim rs
    Dim strDataSource
    Dim strFileName
    Dim strConnectionString
    Dim strSQL
    
    strDataSource = "C:\Data\Tools\UWSC\uwsc44\rokuro_mountain\"
    strFileName = "hatena_rokuro_mountain_plotter.csv"

    cn = CreateOleObj("ADODB.Connection")

    //strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
    //  "Data Source=C:\Data\Tools\UWSC\uwsc44\rokuro_mountain\;" + _
    //  "Extended Properties=" + Chr(34) + "text;HDR=Yes;FMT=Delimited;" + Chr(34) + ";"

    strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
     "Data Source=" + strDataSource + ";" + _
     "Extended Properties=" + Chr(34) + "text;HDR=Yes;FMT=Delimited;" + Chr(34) + ";"
    
    cn.Open( strConnectionString )

    Dim nCount
    nCount = 0

    Dim x
    Dim y
    Dim z
    
    Dim org_x
    Dim org_y
    Dim org_z
    
    Dim max_x
    Dim max_y
    Dim max_z
    max_x = 181 // データの最大幅
    max_y = 176 // データの最大奥行き
    max_z = 81  // データの最大高さ

    Dim last_pos_x
    Dim last_pos_y
    Dim nColorIndex
    Dim nLastColor
    last_pos_x = 0
    last_pos_y = g_y - 0 / 2

    線描画を選択
    nColorIndex = -1
    nLastColor = 0
    色を選択( nLastColor )
    
    Dim i
    For i = 1 To max_y Step 5
        last_pos_x = 1
        nLastColor = 0
        // 指定座標のデータを取得
        strSQL = "SELECT X, Z FROM " + strFileName + " WHERE y = " + i
//        Print "strSQL = [" + strSQL + "]"
        rs = cn.Execute( strSQL )
        While !rs.BOF And !rs.EOF
            nCount = nCount + 1
            org_x = rs.Fields(0).Value // X
            org_y = rs.Fields(1).Value // Z
            x = org_x
            y = g_y - org_y / 2
            Ifb x = 0 Then
                last_pos_y = y
            EndIf

//            Print "x = [" + x + "], y = [" + y + "], z = [" + z + "]"

            Dim nLarge
            nLarge = 2 // 3
            nColorIndex = Int(org_y / 10)
//            Print "nColorIndex = [" + nColorIndex + "]"
            //Ifb nColorIndex <> -1 Then
            //    Ifb last_pos_x = 0 Or nLastColor = -1 Then
            //        last_pos_x = x
            //    EndIf
            //EndIf
            
            // 色を選択する回数を最少化
            Ifb nColorIndex <> nLastColor Or x = 1 Then
                色を選択( nColorIndex )
            EndIf
            
            // 線を引く回数を最少化
            Ifb y <> last_pos_y Or x = max_x Then
                BTN(LEFT,DOWN,g_x + last_pos_x * nLarge,     g_y + last_pos_y * nLarge,     g_wait)
                BTN(LEFT,UP,  g_x + x          * nLarge + 1, g_y + y          * nLarge + 0, g_wait)
                last_pos_x = x
                last_pos_y = y
            EndIf

            nLastColor = nColorIndex

            rs.MoveNext
        Wend
        
        後にちょっと移動
    Next

Fend

Procedure 手前に線を描く()
    筆を置く
    後に移動
    筆を戻す
    前に移動
Fend

// [Shift] + [A] … 右に移動(X 軸を + に移動)
// [Shift] + [D] … 左に移動(X 軸を - に移動)
// 
// [Shift] + [W] … 下に移動(Y 軸を - に移動)
// [Shift] + [S] … 上に移動(Y 軸を + に移動)
// 
// [Shift] + [Q] … 後に移動(Z 軸を - に移動)
// [Shift] + [E] … 前に移動(Z 軸を + に移動)
// 

Procedure 右に指定ブロック移動( nBlock )
    任意の方向に指定ブロック移動( "右", nBlock )
Fend

Procedure 左に指定ブロック移動( nBlock )
    任意の方向に指定ブロック移動( "左", nBlock )
Fend

Procedure 下に指定ブロック移動( nBlock )
    任意の方向に指定ブロック移動( "下", nBlock )
Fend

Procedure 上に指定ブロック移動( nBlock )
    任意の方向に指定ブロック移動( "上", nBlock )
Fend

Procedure 後に指定ブロック移動( nBlock )
    任意の方向に指定ブロック移動( "後", nBlock )
Fend

Procedure 前に指定ブロック移動( nBlock )
    任意の方向に指定ブロック移動( "前", nBlock )
Fend

Procedure 右に回転()
    任意の方向に移動( "→" )
Fend

Procedure 左に回転()
    任意の方向に移動( "←" )
Fend

Procedure 下に回転()
    任意の方向に移動( "↓" )
Fend

Procedure 上に回転()
    任意の方向に移動( "↑" )
Fend

Procedure 任意の方向に指定ブロック移動( strDirection, nBlock )
    Dim i
    For i = 1 To nBlock
        任意の方向に移動( strDirection )
        任意の方向にちょっと移動( strDirection )
    Next
Fend

Procedure 右に移動()
    任意の方向に移動( "右" )
Fend

Procedure 左に移動()
    任意の方向に移動( "左" )
Fend

Procedure 下に移動()
    任意の方向に移動( "下" )
Fend

Procedure 上に移動()
    任意の方向に移動( "上" )
Fend

Procedure 後に移動()
    任意の方向に移動( "後" )
Fend

Procedure 前に移動()
    任意の方向に移動( "前" )
Fend

Procedure 任意の方向に移動( strDirection )
    Dim key
    key = キーコードを取得( strDirection )
    移動( key )
Fend

Procedure 移動( key )
    KBD(VK_SHIFT,DOWN,g_wait)
    KBD(key,CLICK,    g_wait)
    KBD(key,CLICK,    g_wait)
    KBD(key,CLICK,    g_wait)
    KBD(key,CLICK,    g_wait)
    KBD(VK_SHIFT,UP,  g_wait)
Fend

Procedure 右にちょっと移動()
    任意の方向にちょっと移動( "右" )
Fend

Procedure 左にちょっと移動()
    任意の方向にちょっと移動( "左" )
Fend

Procedure 下にちょっと移動()
    任意の方向にちょっと移動( "下" )
Fend

Procedure 上にちょっと移動()
    任意の方向にちょっと移動( "上" )
Fend

Procedure 後にちょっと移動()
    任意の方向にちょっと移動( "後" )
Fend

Procedure 前にちょっと移動()
    任意の方向にちょっと移動( "前" )
Fend

Procedure 右にちょっと回転()
    任意の方向にちょっと移動( "→" )
Fend

Procedure 左にちょっと回転()
    任意の方向にちょっと移動( "←" )
Fend

Procedure 下にちょっと回転()
    任意の方向にちょっと移動( "↓" )
Fend

Procedure 上にちょっと回転()
    任意の方向にちょっと移動( "↑" )
Fend

Procedure 任意の方向にちょっと移動( strDirection )
    Dim key
    key = キーコードを取得( strDirection )
    ちょっと移動( key )
Fend

Procedure ちょっと移動( key )
    KBD(VK_SHIFT,DOWN,g_wait)
    KBD(key,CLICK,    g_wait)
    KBD(VK_SHIFT,UP,  g_wait)
Fend

Function キーコードを取得( strDirection )
    Public HashTbl directionTable
    directionTable["右"] = VK_A
    directionTable["左"] = VK_D
    directionTable["下"] = VK_W
    directionTable["上"] = VK_S
    directionTable["後"] = VK_Q
    directionTable["前"] = VK_E

    directionTable["→"] = VK_RIGHT
    directionTable["←"] = VK_LEFT
    directionTable["↓"] = VK_DOWN
    directionTable["↑"] = VK_UP

    Result = directionTable[strDirection]
Fend

Procedure 筆を置く()
    BTN(LEFT,DOWN,g_x,g_y,g_wait)
Fend

Procedure 筆を戻す()
    BTN(LEFT,UP,g_x,g_y,g_wait)
Fend

Procedure 線描画を選択()
    Dim tool_no = 0
    tool_no = ツール番号を取得( "線描画" )
    ツールを選択( tool_no )
Fend

Procedure 鉛筆を選択()
    Dim tool_no = 0
    tool_no = ツール番号を取得( "鉛筆" )
    ツールを選択( tool_no )
Fend

Function ツール番号を取得( toolName )
    Public HashTbl toolNameTable
    // ツール名→ツール番号変換
    toolNameTable["保存"]   = 0  // 保存
    toolNameTable["戻す"]   = 1  // 戻す
    toolNameTable["鉛筆"]   = 2  // 鉛筆
    toolNameTable["線描画"] = 3  // 線描画

    Result = toolNameTable[toolName]

    Print "toolName = [" + toolName + "]"
    Print "tool_no = [" + Result + "]"
Fend


Procedure ツールを選択( tool_no )
    Dim select_pos_x
    Dim select_pos_y
    select_pos_x = g_toolbox_basic_x + 25*tool_no
    select_pos_y = g_toolbox_basic_y
    Print "g_toolbox_basic_x = [" + g_toolbox_basic_x + "]"
    Print "g_toolbox_basic_y = [" + g_toolbox_basic_y + "]"
    Print "select_pos_x = [" + select_pos_x + "]"
    Print "select_pos_y = [" + select_pos_y + "]"
    指定座標をクリック( select_pos_x, select_pos_y )
Fend

Procedure 色を選択( color_no )
    Dim select_pos_x
    Dim select_pos_y
    select_pos_x = g_toolbox_color_x + 19*color_no
    select_pos_y = g_toolbox_color_y
    
    指定座標をクリック( select_pos_x, select_pos_y )
Fend

Procedure 指定座標をクリック( select_pos_x, select_pos_y )
    MMV( select_pos_x, select_pos_y, g_wait )
    BTN( LEFT,CLICK, select_pos_x, select_pos_y, g_wait )
Fend

Function 色番号を取得( dotChar )
    Public HashTbl colorTable
    // 記号→色番号変換
    colorTable["‥"] = -1 // 透明
    colorTable["□"] = 1  // 肌色
    //colorTable["□"] = 0  ////colorTable["■"] = 2  // 桃色
    colorTable["■"] = 0  // 白
    colorTable["〓"] = 6  //// 色名→色番号変換
    colorTable["無"] = -1 // 透明
    colorTable["白"] = 0  // 白
    colorTable["肌"] = 1  // 肌色
    colorTable["茶"] = 2  // 茶色
    colorTable["桃"] = 3  // ピンク
    colorTable["黄"] = 4  // 黄色
    colorTable["緑"] = 5  // 黄緑
    colorTable["水"] = 6  // 水色
    colorTable["青"] = 7  // 青
    colorTable["紫"] = 8  // 青紫

    Result = colorTable[dotChar]
Fend
 |