Skip to content

Commit 96ecf50

Browse files
committed
🎨添加border自动自动编组
1 parent c8f363a commit 96ecf50

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

client/index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,10 @@ <h3>Spacing Paste</h3>
524524
<input type="number" id="border-dash" value="0" min="0" step="0.1"
525525
title="0 = solid; >0 sets dash gap in points">
526526
</div>
527+
<div class="input-group">
528+
<label for="auto-group-border">Auto Group:</label>
529+
<input type="checkbox" id="auto-group-border" checked>
530+
</div>
527531
</div>
528532
<div class="toolbar">
529533
<button class="btn btn-primary" id="add-border-button">Add Border</button>

host/index.jsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ var borderColorInput = document.querySelector("#border-color");
8686
var borderThicknessInput = document.querySelector("#border-thickness");
8787
var addBorderButton = document.querySelector("#add-border-button");
8888
var borderDashInput = document.querySelector("#border-dash");
89+
var autoGroupBorderCheckbox = document.querySelector("#auto-group-border");
8990

9091
// Event Listeners
9192
arrangeButton.addEventListener("click", handleArrange);
@@ -668,13 +669,14 @@ function handleAddBorder() {
668669
var color = borderColorInput.value;
669670
var thickness = parseFloat(borderThicknessInput.value);
670671
var dash = parseFloat(borderDashInput && borderDashInput.value) || 0;
672+
var autoGroup = autoGroupBorderCheckbox && autoGroupBorderCheckbox.checked;
671673
if (isNaN(thickness) || thickness <= 0) {
672674
alert("Invalid thickness value.");
673675
return;
674676
}
675677

676678
csInterface.evalScript(`$.evalFile("${csInterface.getSystemPath(SystemPath.EXTENSION)}/jsx/arrange.jsx")`);
677-
csInterface.evalScript(`addBorder("${color}", ${thickness}, ${dash})`, function (result) {
679+
csInterface.evalScript(`addBorder("${color}", ${thickness}, ${dash}, ${autoGroup})`, function (result) {
678680
if (result && result.indexOf("Error:") === 0) {
679681
alert(result);
680682
}

jsx/arrange.jsx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,7 +1202,7 @@ function pasteSpacing(direction, spacingMm, moveLeftOrTop) {
12021202
* color: hex color string like "#000000"
12031203
* thickness: stroke width in points
12041204
*/
1205-
function addBorder(color, thickness, dash) {
1205+
function addBorder(color, thickness, dash, autoGroup) {
12061206
if (app.documents.length === 0) return "Error: No document open.";
12071207

12081208
var doc = app.activeDocument;
@@ -1304,8 +1304,24 @@ function addBorder(color, thickness, dash) {
13041304
// In case host doesn't support strokeDashes, ignore
13051305
}
13061306

1307-
// Move to top of the item in stacking order
1308-
rect.move(item, ElementPlacement.PLACEATBEGINNING);
1307+
// 若需要自动编组,先创建组并把边框和对象按原顺序收进组;否则仅把边框移到对象上方
1308+
if (autoGroup) {
1309+
try {
1310+
// 新建组(默认在当前图层最上方)
1311+
var group = doc.groupItems.add();
1312+
// 把对象先移进组(会保留原可视位置)
1313+
item.move(group, ElementPlacement.PLACEATEND);
1314+
// 再把边框移进组,置于对象上方
1315+
rect.move(group, ElementPlacement.PLACEATBEGINNING);
1316+
// 不再移动 group 本身,保持与原图层同级
1317+
} catch (e) {
1318+
// 若建组失败,回退到仅把边框放对象上方
1319+
rect.move(item, ElementPlacement.PLACEATBEGINNING);
1320+
}
1321+
} else {
1322+
// 不编组时,仅把边框移到对象上方
1323+
rect.move(item, ElementPlacement.PLACEATBEGINNING);
1324+
}
13091325
}
13101326

13111327
return "Success";

0 commit comments

Comments
 (0)