Skip to content

Commit

Permalink
close issue #8
Browse files Browse the repository at this point in the history
  • Loading branch information
pchiorean committed Jun 29, 2020
1 parent 8d22bea commit 74c3183
Show file tree
Hide file tree
Showing 8 changed files with 454 additions and 83 deletions.
77 changes: 67 additions & 10 deletions fit2page.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Fit to page v1.4.0
Fit to page v1.5.0
© June 2020, Paul Chiorean
This script resizes the selection to the page size.
*/
Expand All @@ -13,14 +13,71 @@ if (sel.length == 0 || (sel[0].constructor.name == "Guide")) {
}
// Resize selected object(s)
for (var i = 0; i < sel.length; i++) {
if (sel[i].constructor.name != "Rectangle") continue;
if (sel[i].parentPage == null) continue;
var szA = sel[i].visibleBounds;
var szB = sel[i].parentPage.bounds;
sel[i].geometricBounds = [
szA[2] > szB[0] ? Math.max(szA[0], szB[0]) : szA[0],
szA[3] > szB[1] ? Math.max(szA[1], szB[1]) : szA[1],
szA[0] < szB[2] ? Math.min(szA[2], szB[2]) : szA[2],
szA[1] < szB[3] ? Math.min(szA[3], szB[3]) : szA[3]
var obj = sel[i], page;
if (page = obj.parentPage) Fit(obj);
}


function Fit(obj) {
// Get target size
var szOg = obj.geometricBounds;
var szOv = obj.visibleBounds;
var szB = Bounds(page);
var size = [
szOg[2] > szB[0] ? Math.max(szOv[0], szB[0]) : szOg[0], // top
szOg[3] > szB[1] ? Math.max(szOv[1], szB[1]) : szOg[1], // left
szOg[0] < szB[2] ? Math.min(szOv[2], szB[2]) : szOg[2], // bottom
szOg[1] < szB[3] ? Math.min(szOv[3], szB[3]) : szOg[3] // right
];
if ( // Skip if obj size is smaller than target size
Number(szOv[0].toFixed(11)) >= Number(size[0].toFixed(11)) &&
Number(szOv[1].toFixed(11)) >= Number(size[1].toFixed(11)) &&
Number(szOv[2].toFixed(11)) <= Number(size[2].toFixed(11)) &&
Number(szOv[3].toFixed(11)) <= Number(size[3].toFixed(11))
) return;
// Clipping rectangle properties
var clipFrameP = {
label: "<clip group>", name: "<clip group>",
fillColor: "None", strokeColor: "None",
geometricBounds: size
}
// Case 1: Simple rectangles
if (obj.constructor.name == "Rectangle" &&
obj.strokeWeight == 0 &&
(obj.absoluteRotationAngle == 0 ||
Math.abs(obj.absoluteRotationAngle) == 90 ||
Math.abs(obj.absoluteRotationAngle) == 180)) {
obj.geometricBounds = size; return;
}
// Case 2: Orthogonal lines
if (obj.constructor.name == "GraphicLine" && (szOg[0] == szOg[2]) || (szOg[1] == szOg[3])) {
// Make temp rectangle and resolve TL-BR
var frame = page.rectangles.add(clipFrameP);
var frame_TL = frame.resolve(AnchorPoint.TOP_LEFT_ANCHOR,
CoordinateSpaces.SPREAD_COORDINATES)[0];
var frame_BR = frame.resolve(AnchorPoint.BOTTOM_RIGHT_ANCHOR,
CoordinateSpaces.SPREAD_COORDINATES)[0];
frame.remove(); // Remove temp rectangle
if ( // Skip if obj size is smaller than target size
Number(size[0].toFixed(11)) <= Number(frame_TL[1].toFixed(11)) &&
Number(size[1].toFixed(11)) <= Number(frame_TL[0].toFixed(11)) &&
Number(size[2].toFixed(11)) >= Number(frame_BR[3].toFixed(11)) &&
Number(size[3].toFixed(11)) >= Number(frame_BR[2].toFixed(11))
) return;
if (obj.endCap != 1919115632) { // If endcap is round, skip
obj.reframe(CoordinateSpaces.SPREAD_COORDINATES, [frame_TL, frame_BR]);
return;
}
}
// Case 2: Text frames
if (obj.constructor.name == "TextFrame") return;
// Other cases: Containment
var frame = page.rectangles.add(clipFrameP); // Make clipping rectangle
frame.sendToBack(obj);
app.select(obj); app.cut();
app.select(frame); app.pasteInto();
}

function Bounds(page) { // Return page bounds
return page.bounds;
}
75 changes: 64 additions & 11 deletions fit2pagebleed.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Fit to page bleed v1.2.0
Fit to page bleed v1.3.0
© June 2020, Paul Chiorean
This script resizes the selection to the page size, including bleed.
*/
Expand All @@ -13,20 +13,73 @@ if (sel.length == 0 || (sel[0].constructor.name == "Guide")) {
}
// Resize selected object(s)
for (var i = 0; i < sel.length; i++) {
if (sel[i].constructor.name != "Rectangle") continue;
if (sel[i].parentPage == null) continue;
var szA = sel[i].visibleBounds;
var szB = bounds(sel[i].parentPage);
sel[i].geometricBounds = [
szA[2] > szB[0] ? Math.max(szA[0], szB[0]) : szA[0],
szA[3] > szB[1] ? Math.max(szA[1], szB[1]) : szA[1],
szA[0] < szB[2] ? Math.min(szA[2], szB[2]) : szA[2],
szA[1] < szB[3] ? Math.min(szA[3], szB[3]) : szA[3]
var obj = sel[i], page;
if (page = obj.parentPage) Fit(obj);
}


function Fit(obj) {
// Get target size
var szOg = obj.geometricBounds;
var szOv = obj.visibleBounds;
var szB = Bounds(page);
var size = [
szOg[2] > szB[0] ? Math.max(szOv[0], szB[0]) : szOg[0], // top
szOg[3] > szB[1] ? Math.max(szOv[1], szB[1]) : szOg[1], // left
szOg[0] < szB[2] ? Math.min(szOv[2], szB[2]) : szOg[2], // bottom
szOg[1] < szB[3] ? Math.min(szOv[3], szB[3]) : szOg[3] // right
];
if ( // Skip if obj size is smaller than target size
Number(szOv[0].toFixed(11)) >= Number(size[0].toFixed(11)) &&
Number(szOv[1].toFixed(11)) >= Number(size[1].toFixed(11)) &&
Number(szOv[2].toFixed(11)) <= Number(size[2].toFixed(11)) &&
Number(szOv[3].toFixed(11)) <= Number(size[3].toFixed(11))
) return;
// Clipping rectangle properties
var clipFrameP = {
label: "<clip group>", name: "<clip group>",
fillColor: "None", strokeColor: "None",
geometricBounds: size
}
// Case 1: Simple rectangles
if (obj.constructor.name == "Rectangle" &&
obj.strokeWeight == 0 &&
(obj.absoluteRotationAngle == 0 ||
Math.abs(obj.absoluteRotationAngle) == 90 ||
Math.abs(obj.absoluteRotationAngle) == 180)) {
obj.geometricBounds = size; return;
}
// Case 2: Orthogonal lines
if (obj.constructor.name == "GraphicLine" && (szOg[0] == szOg[2]) || (szOg[1] == szOg[3])) {
// Make temp rectangle and resolve TL-BR
var frame = page.rectangles.add(clipFrameP);
var frame_TL = frame.resolve(AnchorPoint.TOP_LEFT_ANCHOR,
CoordinateSpaces.SPREAD_COORDINATES)[0];
var frame_BR = frame.resolve(AnchorPoint.BOTTOM_RIGHT_ANCHOR,
CoordinateSpaces.SPREAD_COORDINATES)[0];
frame.remove(); // Remove temp rectangle
if ( // Skip if obj size is smaller than target size
Number(size[0].toFixed(11)) <= Number(frame_TL[1].toFixed(11)) &&
Number(size[1].toFixed(11)) <= Number(frame_TL[0].toFixed(11)) &&
Number(size[2].toFixed(11)) >= Number(frame_BR[3].toFixed(11)) &&
Number(size[3].toFixed(11)) >= Number(frame_BR[2].toFixed(11))
) return;
if (obj.endCap != 1919115632) { // If endcap is round, skip
obj.reframe(CoordinateSpaces.SPREAD_COORDINATES, [frame_TL, frame_BR]);
return;
}
}
// Case 2: Text frames
if (obj.constructor.name == "TextFrame") return;
// Other cases: Containment
var frame = page.rectangles.add(clipFrameP); // Make clipping rectangle
frame.sendToBack(obj);
app.select(obj); app.cut();
app.select(frame); app.pasteInto();
}


function bounds(page) { // Return page bleed bounds
function Bounds(page) { // Return page bleed bounds
var fPg = page.parent.pages.firstItem();
var lPg = page.parent.pages.lastItem();
var bleed = {
Expand Down
38 changes: 32 additions & 6 deletions fit2pagebleedF.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Fit to page bleed, forced v1.1.1
Fit to page bleed, forced v1.2.0
© June 2020, Paul Chiorean
This script resizes the selection to the page size, including bleed.
*/
Expand All @@ -11,15 +11,41 @@ var sel = doc.selection;
if (sel.length == 0 || (sel[0].constructor.name == "Guide")) {
alert("Select an object and try again."); exit();
}
// Resize selected object(s)
for (var i = 0; i < sel.length; i++) {
if (sel[i].constructor.name != "Rectangle") continue;
if (sel[i].parentPage == null) continue;
var size = bounds(sel[i].parentPage);
sel[i].geometricBounds = size;
var obj = sel[i], page;
if (page = obj.parentPage) Fit(obj);
}


function bounds(page) { // Return page bleed bounds
function Fit(obj) {
// Get target size
var size = Bounds(page);
// Clipping rectangle properties
var clipFrameP = {
label: "<clip group>", name: "<clip group>",
fillColor: "None", strokeColor: "None",
geometricBounds: size
}
// Case 1: Simple rectangles
if (obj.constructor.name == "Rectangle" &&
obj.strokeWeight == 0 &&
(obj.absoluteRotationAngle == 0 ||
Math.abs(obj.absoluteRotationAngle) == 90 ||
Math.abs(obj.absoluteRotationAngle) == 180)) {
obj.geometricBounds = size; return;
}
// Case 2: Groups
if (obj.constructor.name == "Group") {
var frame = page.rectangles.add(clipFrameP); // Make clipping rectangle
frame.sendToBack(obj);
app.select(obj); app.cut();
app.select(frame); app.pasteInto();
}
}


function Bounds(page) { // Return page bleed bounds
var fPg = page.parent.pages.firstItem();
var lPg = page.parent.pages.lastItem();
var bleed = {
Expand Down
76 changes: 64 additions & 12 deletions fit2pagemargins.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Fit to page margins v1.3.0
Fit to page margins v1.4.0
© June 2020, Paul Chiorean
This script resizes the selection to the page margins.
*/
Expand All @@ -13,20 +13,72 @@ if (sel.length == 0 || (sel[0].constructor.name == "Guide")) {
}
// Resize selected object(s)
for (var i = 0; i < sel.length; i++) {
if (sel[i].constructor.name != "Rectangle") continue;
if (sel[i].parentPage == null) continue;
var szA = sel[i].visibleBounds;
var szB = bounds(sel[i].parentPage);
sel[i].geometricBounds = [
szA[2] > szB[0] ? Math.max(szA[0], szB[0]) : szA[0],
szA[3] > szB[1] ? Math.max(szA[1], szB[1]) : szA[1],
szA[0] < szB[2] ? Math.min(szA[2], szB[2]) : szA[2],
szA[1] < szB[3] ? Math.min(szA[3], szB[3]) : szA[3]
];
var obj = sel[i], page;
if (page = obj.parentPage) Fit(obj);
}


function bounds(page) { // Return page margins bounds
function Fit(obj) {
// Get target size
var szOg = obj.geometricBounds;
var szOv = obj.visibleBounds;
var szB = Bounds(page);
var size = [
szOg[2] > szB[0] ? Math.max(szOv[0], szB[0]) : szOg[0], // top
szOg[3] > szB[1] ? Math.max(szOv[1], szB[1]) : szOg[1], // left
szOg[0] < szB[2] ? Math.min(szOv[2], szB[2]) : szOg[2], // bottom
szOg[1] < szB[3] ? Math.min(szOv[3], szB[3]) : szOg[3] // right
];
if ( // Skip if obj size is smaller than target size
Number(szOv[0].toFixed(11)) >= Number(size[0].toFixed(11)) &&
Number(szOv[1].toFixed(11)) >= Number(size[1].toFixed(11)) &&
Number(szOv[2].toFixed(11)) <= Number(size[2].toFixed(11)) &&
Number(szOv[3].toFixed(11)) <= Number(size[3].toFixed(11))
) return;
// Clipping rectangle properties
var clipFrameP = {
label: "<clip group>", name: "<clip group>",
fillColor: "None", strokeColor: "None",
geometricBounds: size
}
// Case 1: Simple rectangles
if (obj.constructor.name == "Rectangle" &&
obj.strokeWeight == 0 &&
(obj.absoluteRotationAngle == 0 ||
Math.abs(obj.absoluteRotationAngle) == 90 ||
Math.abs(obj.absoluteRotationAngle) == 180)) {
obj.geometricBounds = size; return;
}
// Case 2: Orthogonal lines
if (obj.constructor.name == "GraphicLine" && (szOg[0] == szOg[2]) || (szOg[1] == szOg[3])) {
// Make temp rectangle and resolve TL-BR
var frame = page.rectangles.add(clipFrameP);
var frame_TL = frame.resolve(AnchorPoint.TOP_LEFT_ANCHOR,
CoordinateSpaces.SPREAD_COORDINATES)[0];
var frame_BR = frame.resolve(AnchorPoint.BOTTOM_RIGHT_ANCHOR,
CoordinateSpaces.SPREAD_COORDINATES)[0];
frame.remove(); // Remove temp rectangle
if ( // Skip if obj size is smaller than target size
Number(size[0].toFixed(11)) <= Number(frame_TL[1].toFixed(11)) &&
Number(size[1].toFixed(11)) <= Number(frame_TL[0].toFixed(11)) &&
Number(size[2].toFixed(11)) >= Number(frame_BR[3].toFixed(11)) &&
Number(size[3].toFixed(11)) >= Number(frame_BR[2].toFixed(11))
) return;
if (obj.endCap != 1919115632) { // If endcap is round, skip
obj.reframe(CoordinateSpaces.SPREAD_COORDINATES, [frame_TL, frame_BR]);
return;
}
}
// Case 2: Text frames
if (obj.constructor.name == "TextFrame") return;
// Other cases: Containment
var frame = page.rectangles.add(clipFrameP); // Make clipping rectangle
frame.sendToBack(obj);
app.select(obj); app.cut();
app.select(frame); app.pasteInto();
}

function Bounds(page) { // Return page margins bounds
var size = [
page.bounds[0] + page.marginPreferences.top,
page.bounds[1] + page.marginPreferences.left,
Expand Down
Loading

0 comments on commit 74c3183

Please sign in to comment.