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がデフォじゃないんだな。他のコマンドはデフォが高速側な印象。