Skip to content

Commit dabc405

Browse files
committed
v1.20-for-beta43
1 parent fd48121 commit dabc405

4 files changed

Lines changed: 64 additions & 61 deletions

File tree

@Path_S.anm2

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
-- under development for v1.20 (for beta42) r7
21
--[[
32
MIT License
43
Copyright (c) 2025-2026 sigma-axis
@@ -24,7 +23,7 @@ SOFTWARE.
2423
https://mit-license.org/
2524
]]
2625
@パスマスクσ
27-
--information:パスマスクσ@Path_S v1.12 (for beta25) by σ軸
26+
--information:パスマスクσ@Path_S v1.20 (for beta43) by σ軸
2827
--label:Path_S\クリッピング
2928
--filter
3029
--require:2004001
@@ -217,7 +216,7 @@ else
217216
end
218217

219218
@パスマスク(ライン)σ
220-
--information:パスマスク(ライン)σ@Path_S v1.12 (for beta25) by σ軸
219+
--information:パスマスク(ライン)σ@Path_S v1.20 (for beta43) by σ軸
221220
--label:Path_S\クリッピング
222221
--filter
223222
--require:2004001
@@ -490,7 +489,7 @@ else
490489
end
491490

492491
@パス部分フィルタσ
493-
--information:パス部分フィルタσ@Path_S v1.12 (for beta25) by σ軸
492+
--information:パス部分フィルタσ@Path_S v1.20 (for beta43) by σ軸
494493
--label:Path_S\加工
495494
--require:2004001
496495
--check@invert:反転,false
@@ -662,7 +661,7 @@ if extra_filter == 0 then
662661
end
663662

664663
@パスに沿って配置σ
665-
--information:パスに沿って配置σ@Path_S v1.12 (for beta25) by σ軸
664+
--information:パスに沿って配置σ@Path_S v1.20 (for beta43) by σ軸
666665
--label:Path_S\配置
667666
--require:2004001
668667
--track@position:位置,-400,400,0,0.001,,0.25

@Path_S.obj2

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
-- under development for v1.20 (for beta42) r8
21
--[[
32
MIT License
43
Copyright (c) 2025-2026 sigma-axis
@@ -24,7 +23,7 @@ SOFTWARE.
2423
https://mit-license.org/
2524
]]
2625
@パス図形σ
27-
--information:パス図形σ@Path_S v1.12 (for beta25) by σ軸
26+
--information:パス図形σ@Path_S v1.20 (for beta43) by σ軸
2827
--label:Path_S\図形
2928
--require:2004001
3029
--track@line:ライン幅,0,1000,5,0.01,,0.2
@@ -224,7 +223,7 @@ if has_fill or has_chrome then
224223
end
225224

226225
@ラインσ
227-
--information:ラインσ@Path_S v1.12 (for beta25) by σ軸
226+
--information:ラインσ@Path_S v1.20 (for beta43) by σ軸
228227
--label:Path_S\図形
229228
--require:2004001
230229
--track@X:終点X,-4000,4000,256,0.01,,0.25
@@ -439,7 +438,7 @@ path_s.path_mask_line(
439438
1, 0, obj.cx, obj.cy);
440439

441440
@スパイラルσ
442-
--information:スパイラルσ@Path_S v1.12 (for beta25) by σ軸
441+
--information:スパイラルσ@Path_S v1.20 (for beta43) by σ軸
443442
--label:Path_S\図形
444443
--require:2004001
445444
--track@start_radius:開始半径,0,2000,0,0.01,,0.25
@@ -619,7 +618,7 @@ path_s.path_mask_line(
619618
1, 0, obj.cx, obj.cy);
620619

621620
@アローσ
622-
--information:アローσ@Path_S v1.12 (for beta25) by σ軸
621+
--information:アローσ@Path_S v1.20 (for beta43) by σ軸
623622
--label:Path_S\図形
624623
--require:2004001
625624
--track@line:ライン幅,0,1000,5,0.01,,0.2
@@ -878,7 +877,7 @@ end
878877
obj.cx, obj.cy = cx, cy;
879878

880879
@スクウェアσ
881-
--information:スクウェアσ@Path_S v1.12 (for beta25) by σ軸
880+
--information:スクウェアσ@Path_S v1.20 (for beta43) by σ軸
882881
--label:Path_S\図形
883882
--require:2004001
884883
--track@width:幅,0,4000,100,0.01,,0.25

Path_S.lua

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
-- under development for v1.20 (for beta42) r8
21
--[[
32
MIT License
43
Copyright (c) 2025-2026 sigma-axis
@@ -25,7 +24,7 @@ https://mit-license.org/
2524
]]
2625

2726
--
28-
-- v1.12 (for beta25)
27+
-- v1.20 (for beta43)
2928
--
3029

3130
local obj, print, math, tonumber, ipairs, unpack, bit, ffi, buffer = obj, print, math, tonumber, ipairs, unpack, bit, require("ffi"), require("string.buffer");
@@ -66,41 +65,48 @@ local anchor, poll do
6665
---@param pts { [integer]: number? } 点列の配列, `{ x1, y1, x2, y2, x3, y3, ... }` の形式.
6766
---@param n_segs integer パスの分割区間の個数.
6867
---@param loop boolean 閉じたパスかどうか.
68+
---@param alt_points function? `alt_pts = alt_points(path_type, pts, n_segs, loop)` 想定されるアンカーの個数が `pts` の点の個数と異なる場合に呼ばれる関数.代替となる点列テーブルを返す.省略時は独自の方法で代替の点列を構築する.
6969
---@return integer n_anchors 設定したアンカーの個数.
7070
---@return table pts_corrected 足りない点や余剰な点を補正した点列.補正の必要がない場合は `pts` そのもの.
71-
function anchor(var_name, path_type, pts, n_segs, loop)
71+
function anchor(var_name, path_type, pts, n_segs, loop, alt_points)
7272
local pts_per_seg =
7373
path_type == 0 and 1 or
7474
path_type == 1 and 1 or
7575
path_type == 2 and 2 or 3;
7676
local n_anchors = (loop and 0 or 1) + pts_per_seg * n_segs;
7777
local alt_pts = nil;
7878
if 2 * n_anchors ~= #pts then
79-
alt_pts = {};
80-
local n = math.min(n_anchors, math.floor(#pts / 2));
81-
for i = 1, 2 * n do alt_pts[i] = pt(pts, i) end
82-
83-
if n < n_anchors then
84-
-- find a suitable placeholder point.
85-
local k = 1 + math.floor((n - 1) / pts_per_seg) * pts_per_seg;
86-
local X, Y = pt(pts, 2 * k - 1), pt(pts, 2 * k); -- last point.
87-
local dx, dy;
88-
if loop then
89-
dx, dy = (pt(pts, 1) - X) / 2, (pt(pts, 2) - Y) / 2;
90-
else
91-
k = math.max(1, k - pts_per_seg);
92-
dx, dy = (X - pt(pts, 2 * k - 1)) / 2, (Y - pt(pts, 2 * k)) / 2;
93-
end
94-
local l = dx ^ 2 + dy ^ 2;
95-
if l > 100 ^ 2 then
96-
l = 100 / l ^ 0.5; -- at most 100 pixel far.
97-
dx, dy = l * dx, l * dy;
98-
end
99-
X, Y = X + dx, Y + dy;
79+
if alt_points then
80+
alt_pts = alt_points(path_type, pts, n_segs, loop);
81+
if 2 * n_anchors ~= #alt_pts then alt_pts = nil end
82+
end
83+
if alt_pts == nil then
84+
alt_pts = {};
85+
local n = math.min(n_anchors, math.floor(#pts / 2));
86+
for i = 1, 2 * n do alt_pts[i] = pt(pts, i) end
87+
88+
if n < n_anchors then
89+
-- find a suitable placeholder point.
90+
local k = 1 + math.floor((n - 1) / pts_per_seg) * pts_per_seg;
91+
local X, Y = pt(pts, 2 * k - 1), pt(pts, 2 * k); -- last point.
92+
local dx, dy;
93+
if loop then
94+
dx, dy = (pt(pts, 1) - X) / 2, (pt(pts, 2) - Y) / 2;
95+
else
96+
k = math.max(1, k - pts_per_seg);
97+
dx, dy = (X - pt(pts, 2 * k - 1)) / 2, (Y - pt(pts, 2 * k)) / 2;
98+
end
99+
local l = dx ^ 2 + dy ^ 2;
100+
if l > 100 ^ 2 then
101+
l = 100 / l ^ 0.5; -- at most 100 pixel far.
102+
dx, dy = l * dx, l * dy;
103+
end
104+
X, Y = X + dx, Y + dy;
100105

101-
-- fill the rest with that placeholder.
102-
for i = n + 1, n_anchors do
103-
alt_pts[2 * i - 1], alt_pts[2 * i] = X, Y;
106+
-- fill the rest with that placeholder.
107+
for i = n + 1, n_anchors do
108+
alt_pts[2 * i - 1], alt_pts[2 * i] = X, Y;
109+
end
104110
end
105111
end
106112
end

README.md

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838

3939
http://spring-fragrance.mints.ne.jp/aviutl
4040

41-
- `beta25` で動作確認済み.
41+
- `beta43` で動作確認済み.
4242

4343
## 導入方法
4444

@@ -322,8 +322,6 @@ Although, usage documentations for this script / plugin in languages other than
322322

323323
### パス図形σのパラメタ
324324

325-
![Image of GUI of Figure](https://github.com/user-attachments/assets/db98e5eb-91c7-4956-a62e-d0cef192d3c7)
326-
327325
#### ライン色, ライン透明度
328326

329327
図形のライン部分の色と透明度を指定します.
@@ -341,8 +339,6 @@ Although, usage documentations for this script / plugin in languages other than
341339

342340
### ラインσのパラメタ
343341

344-
![Image of GUI of Curve](https://github.com/user-attachments/assets/1bbc84af-bd0c-4cbb-9315-f648c3c2ba96)
345-
346342
#### 終点X, 終点Y
347343

348344
ラインの終点の X, Y 座標を指定します (始点はオブジェクトの標準描画等の指定座標です).
@@ -386,8 +382,6 @@ Although, usage documentations for this script / plugin in languages other than
386382

387383
### スパイラルσのパラメタ
388384

389-
![Image of GUI of Spiral](https://github.com/user-attachments/assets/a44b065a-82d1-47da-9de6-10425c82f65a)
390-
391385
#### 傾き
392386

393387
螺旋の半径に対する角度の移動量の比率を調整します.厳密な解釈は[「形状」](#形状-1)によって異なりますが,数値 (の絶対値) が大きいほど回転回数が大きくなります.負になると回転方向が逆転します.
@@ -441,8 +435,6 @@ Although, usage documentations for this script / plugin in languages other than
441435

442436
### アローσのパラメタ
443437

444-
![Image of GUI of Arrow](https://github.com/user-attachments/assets/e878b7c9-801c-4b10-b29a-2b88e091c4db)
445-
446438
####
447439

448440
矢印図形の色を指定します.
@@ -496,8 +488,6 @@ Although, usage documentations for this script / plugin in languages other than
496488

497489
### スクウェアσのパラメタ
498490

499-
![Image of GUI of Round Rect](https://github.com/user-attachments/assets/2daa8080-8816-4b6f-a0ab-51ae1173fa6c)
500-
501491
#### 幅, 高さ
502492

503493
四角形の幅と高さをピクセル単位で指定します.実際のオブジェクトのサイズは,ライン幅やぼかし幅などでこの数値よりも大きくなります.
@@ -564,10 +554,6 @@ Although, usage documentations for this script / plugin in languages other than
564554

565555
### パスマスクσ / パスマスク(ライン)σ / パス部分フィルタσのパラメタ
566556

567-
![Image of GUI of Clip by Path (Area)](https://github.com/user-attachments/assets/744a1c17-3c34-4b7c-a2b3-c9bbec823827)
568-
![Image of GUI of Clip by Path (Line)](https://github.com/user-attachments/assets/19a729f3-da7d-4ed7-ba49-4ab53aebc74a)
569-
![Image of GUI of Partial Filter by Path](https://github.com/user-attachments/assets/0ac4089e-ce38-47ad-84d1-a44e2222d2e8)
570-
571557
#### 強さ
572558

573559
*「パスマスクσ」と「パスマスク(ライン)σ」のみの項目です.*
@@ -632,8 +618,6 @@ obj.cx=obj.cx+100 -- 位置もずらせる
632618

633619
### パスに沿って配置σのパラメタ
634620

635-
![Image of GUI of Place Along Path](https://github.com/user-attachments/assets/5e828666-1ee6-479b-adbf-e292274b6a8d)
636-
637621
#### 位置
638622

639623
オブジェクトを配置する位置を,パス全体の長さからの割合で % 単位で指定します.[「ループ」](#ループ)が ON の場合,0 % を下回った分はパスの終了点から,100 % を上回った分はパスの開始点からカウントされます.
@@ -866,10 +850,15 @@ radii = { uniform = 10; { 16, 8 }, nil, 20, nil }
866850
X = num, Y = num, -- number 型で "移動X", "移動Y" の項目を上書き,または nil.
867851
zoom = num, -- number 型で "拡大率" の項目を上書き,または nil.
868852
rotate = num, -- number 型で "回転" の項目を上書き,または nil.
853+
854+
-- 以降は require("Path_S") からの API で代替できるようになったため非推奨です.
869855
pt_buff = str, -- string 型で, パスの頂点情報を保持している画像バッファ名を指定,または nil. 詳細後述.
870856
}
871857
```
872858

859+
<details>
860+
<summary>v1.12 以前の「パス図形σ」などで内部的に使われていましたが,現在は非推奨な項目の解説です:</summary>
861+
873862
フィールド `.pt_buff``"tempbuffer"``"cache:****"` の形式の文字列で,`Path_S.lua``.send()` 関数によって頂点情報が保持されている画像バッファ名を指定します.この場合,次に注意してください:
874863
1. 「頂点数」または `.num_points` にはこのバッファに保持された点の個数を指定すること.
875864
1. 次のパラメタやフィールドは無視されます:
@@ -880,7 +869,7 @@ radii = { uniform = 10; { 16, 8 }, nil, 20, nil }
880869
1. 「拡大率」と `.zoom`.
881870
1. 「回転」と `.rotate`.
882871
1. 指定された頂点は折れ線と解釈して描画されます.
883-
872+
</details>
884873

885874
#### パスマスク(ライン)σの `PI`
886875

@@ -904,12 +893,17 @@ radii = { uniform = 10; { 16, 8 }, nil, 20, nil }
904893
X = num, Y = num, -- number 型で "移動X", "移動Y" の項目を上書き,または nil.
905894
zoom = num, -- number 型で "拡大率" の項目を上書き,または nil.
906895
rotate = num, -- number 型で "回転" の項目を上書き,または nil.
896+
897+
-- 以降は require("Path_S") からの API で代替できるようになったため非推奨です.
907898
pt_buff = str, -- string 型で, パスの頂点情報を保持している画像バッファ名を指定,または nil. 詳細後述.
908899
len_buff = num, -- number 型で, パス全体のピクセル長を指定,または nil. 詳細後述.
909900
endpt_buff = tab, -- table 型で, パスの両端の座標と方向を記述,または nil. 詳細後述.
910901
}
911902
```
912903

904+
<details>
905+
<summary>v1.12 以前の「パス図形σ」などで内部的に使われていましたが,現在は非推奨な項目の解説です:</summary>
906+
913907
フィールド `.pt_buff``"tempbuffer"``"cache:****"` の形式の文字列で,`Path_S.lua``.send()` 関数によって頂点情報が保持されている画像バッファ名を指定します.この場合,次に注意してください:
914908
1. 「頂点数」または `.num_points` にはこのバッファに保持された点の個数を指定すること.
915909
1. `.len_buff` にはパス全体のピクセル長を指定すること.
@@ -936,7 +930,7 @@ radii = { uniform = 10; { 16, 8 }, nil, 20, nil }
936930
1. 指定された頂点は折れ線と解釈して描画されます.
937931

938932
`.pt_buff` `nil` の場合は,`.len_buff` `.endpt_buff` は無視されます.
939-
933+
</details>
940934

941935
#### パス部分フィルタσの `PI`
942936

@@ -974,6 +968,13 @@ radii = { uniform = 10; { 16, 8 }, nil, 20, nil }
974968
}
975969
```
976970

971+
## 同梱のスクリプトファイル `Path_S.lua` について
972+
973+
他スクリプトからの利用も想定したものになっていて,`local path_s = require("Path_S")` から各種 API を呼び出せます.
974+
975+
「パスマスクσ」「パスマスク(ライン)σ」に関しては `obj.effect(...)` を使わずとも `path_s.path_mask_area(...)``path_s.path_mask_line(...)` から適用できます.各種パスの曲線を折れ線に変換するなどといった API も用意しています.
976+
977+
`Path_S.lua` にドキュメントコメントを残しているので,詳しい仕様はそちらを参照してください.
977978

978979
## 既知の問題
979980

@@ -983,9 +984,9 @@ radii = { uniform = 10; { 16, 8 }, nil, 20, nil }
983984

984985
1. [「パス部分フィルタσ」](#パス部分フィルタσ)で「後続フィルタ」を指定するものは,1つのオブジェクトに対して複数設定できません (つまり「入れ子」のような構造は指定不可能).
985986

986-
## 次の改版予定
987+
## 改版履歴
987988

988-
- **v1.20 (for beta42)** (2026-??-??)
989+
- **v1.20 (for beta43)** (2026-04-26)
989990

990991
- 「パス部分フィルタσ」で後続フィルタの代わりにスクリプトの直接記入をできるように.
991992
- 3次ベジェ曲線のアンカーのハンドルを色分けして表示するように.
@@ -1007,8 +1008,6 @@ radii = { uniform = 10; { 16, 8 }, nil, 20, nil }
10071008

10081009
- `beta42` での動作確認.
10091010

1010-
## 改版履歴
1011-
10121011
- **v1.12 (for beta25)** (2025-12-22)
10131012

10141013
- 「パスマスクσ」と「パスマスク(ライン)σ」をフィルタオブジェクトとして使えるように設定.

0 commit comments

Comments
 (0)