人気ブログランキング | 話題のタグを見る

AutoHotKeyで、AzPainter2を少し便利に。

 AzPainter2を少し便利にするスクリプト作った。今回実現したのはキー操作によるカレントレイヤの切り替えと、17段階の明度切り替え。

 カーソル上下でレイヤ切り替え。スクロールには非対応。ごくまれにレイヤ順が乱れることがあるが、気にしない方向で。発動時にカーソル動かすとレイヤ移動になっちゃうので、BlockInput入れた。解除されない場合、Alt+Ctrl+Deleteで強制解除できる。AzDには標準でカレントレイヤ切り替えあるのになー。

 PgUp、PgDnで明度変更。厳密にいうとHSVモードだと明度だが、RGBモードだと青。一度実行するとAzP2が終了するまで常駐するが、常駐時はスポイト等で明度を変更しても自動的に17段階のいずれかに補正される。
 こんなんなにに使うのかというと、Seeneon用の深度マップを作るのにめっちゃ便利。17段階(-8 ~ 0 ~ +8)なのも、中央(128)が欲しかったから。

;--------------------------------------------------------------------------------------
; AzPainter2
;--------------------------------------------------------------------------------------
#IfWinActive AzPainter2 - ahk_class Main

Numpad0::Space  ; Numpad0でもスクロール

Up::  ; ひとつ上をカレントレイヤに
  ALayerChange(1)
return

Down::  ; ひとつ下をカレントレイヤに
  ALayerChange(0)
return

PGUP::
.::  ; HSVモード時、明度を上げる(17段階)
  if (CVLv < 16)
    CVLv++
  C3SetLevel(CVLv)
return

PGDN::
,::  ; HSVモード時、明度を下げる(17段階)
  if (CVLv > 0)
    CVLv--
  C3SetLevel(CVLv)
return

ALayerChange(SW) {
  IfWinNotExist, レイヤ ahk_class Layer
    return
  
  BlockInput, On
  WinGetPos, WX, WY
  ControlGetPos, CX, CY, CW, CH, LayerView1
  CX += 4,   CY -= 16
  BaseX := WX + CX,   BaseY := WY + CY
  MaxX := BaseX + CW,   MaxY := BaseY + CH

  CoordMode, Pixel
  PixelSearch, , PY, BaseX, BaseY, MaxX, MaxY, 0xC6D1FF, 0, Fast
  if ErrorLevel {
    BlockInput, Off
    return
  }
  
  LayerNum := (PY - BaseY) // 35 + 1
  
  SW ? LayerNum-- : LayerNum++
  CCY := CY + 35 * LayerNum
  ControlClick, X%CX% Y%CCY%, , , L, 1, Pos NA
  BlockInput, Off
}

CheckCV:
  IfWinNotExist, AzPainter2 - ahk_class Main
  {
    ToolTip, , , , 2
    SetTimer, CheckCV, Off
    return
  }
  
  ControlGetText, CVNum, Edit3, コントロール ahk_class #32770
  if (BefCVNum == CVNum)
    return
  BefCVNum := CVNum
  
  CVLv := CVNum // 16
  if (8 <= (CVNum - CVLv * 16))
    CVLv++
  
  C3SetLevel(CVLv)
return

C3SetLevel(CVLv) {
  IfWinNotExist, コントロール ahk_class #32770
    return

  CoordMode, ToolTip
  WinGetPos, WX, WY
  ShowCVLv := CVLv - 8
  ToolTip, %ShowCVLv%, %WX%, %WY%, 2
  SetTimer, CheckCV, 300
  
  CVNum := 16 * CVLv
  ControlSetText, Edit3, %CVNum%
}

 レイヤの数は限られてるんだし、PixelSearchで広範囲を走査するより、その数だけPixelGetColorした方が早いんじゃね?と思ったが、そんなことはなかったぜ!
 あと、PixelSearchってFastがデフォじゃないんだな。他のコマンドはデフォが高速側な印象。


by lordnoesis | 2013-07-16 19:24 | テクノロジ | Trackback | Comments(0)
ブログトップ | ファンになる