Created
July 16, 2015 14:36
-
-
Save sojack/b200b8bab00433c8cc9c to your computer and use it in GitHub Desktop.
This Adobe Illustrator script creates regmarks for Zund cutter around dieline path which must be selected.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This Adobe Illustrator script creates regmarks for Zund cutter around dieline path which must be selected. | |
// 2015-07-16 - on new illustrator version CC-2015 outercut layer was on top or regmark. Fixed by transposing the function calls at the end of the scritp. | |
// 2013-10-26 - now draws bullet beyond the bleed. Future improvement: bleed value dialogue box for instances of different values. | |
// 2013-03-18 - major rewrite, now draws bullets around multiple selected elements. Still to fix: outercut is perimeter- change to bleed. | |
// 2012-09-16 - minor fix to position of regmarks using position[x,y] instead top, left (which adds stroke weight when present) | |
// 2012-09-12 - minor fix to outer cut positioning | |
// 2012-09-03 - added outer cut and artboard resizing | |
// 2011-06-14 - basic functionality | |
var mydoc = app.activeDocument, | |
myselection = app.selection; | |
function getPerimeter(){ | |
var i = 0, | |
max = myselection.length; | |
var x1, x2, y1, y2; | |
var allminX = []; | |
var allmaxX = []; | |
var allminY = []; | |
var allmaxY = []; | |
for ( i; i < max; i++ ){ | |
allminX.push( selection[i].position[0] ); | |
allmaxX.push( selection[i].position[0] + selection[i].width ); | |
allminY.push( selection[i].position[1] ); | |
allmaxY.push( selection[i].position[1] - selection[i].height ); | |
} | |
allminX.sort(function(a,b){return a-b;}); | |
allmaxX.sort(function(a,b){return a-b;}); | |
allminY.sort(function(a,b){return a-b;}); | |
allmaxY.sort(function(a,b){return a-b;}); | |
x1 = allminX[0]; | |
x2 = allmaxX[allmaxX.length - 1]; | |
y1 = allminY[allminY.length - 1]; | |
y2 = allmaxY[0]; | |
var bleed = 9; | |
// now return top, left, width, height | |
return [y1+bleed, x1-bleed, x2-x1+2*bleed, -(y2-y1)+2*bleed] | |
} | |
function makeOuterCut (p){ | |
// create Outer-Cut layer | |
var outerCutLayer = mydoc.layers.add(); | |
outerCutLayer.name = "outerCut"; | |
var offset = 27; | |
var outerCut = outerCutLayer.pathItems.rectangle(p[0]+offset, p[1]-offset, p[2]+2*offset,p[3]+2*offset); | |
var outerCutColor = new CMYKColor; | |
outerCutColor.black = 100; | |
outerCut.stroked = true; | |
outerCut.filled = false; | |
outerCut.strokeColor = outerCutColor; | |
} | |
function setRegmark(perimeter){ | |
// top perimeter[0] | |
// left perimeter[1] | |
// width perimeter[2] | |
// height perimeter[3] | |
// create Regmark layer | |
var regmarkLayer = mydoc.layers.add(); | |
regmarkLayer.name = "Regmark"; | |
// calculate the number of horizontal regmarks needed | |
var regmarksInterval = 1296; //scripting defaut unit is points: 18 inches = 1296 pts | |
var numHorizontalRegmarks = Math.ceil(perimeter[2]/regmarksInterval +1); | |
//placement of top line of regmarks | |
var topHorXpos = (perimeter[1]) - 18 - 4.5; | |
var topHorYpos = (perimeter[0])+ 18 + 4.5; | |
var botHorYpos = (perimeter[3] - perimeter[0])*-1 -4.5; | |
// calculate horizontal gap between regmarks; | |
var horGap = (perimeter[2] + 18 + 4.5 + 4.5)/(numHorizontalRegmarks - 1); | |
function makeRegmark (_ypos, _xpos){ | |
var _regmarks = regmarkLayer.pathItems.ellipse(_ypos, _xpos, 18, 18), | |
_regmarkColor = new CMYKColor; | |
_regmarkColor.black = 100; | |
_regmarks.stroked = false; | |
_regmarks.filled = true; | |
_regmarks.fillColor = _regmarkColor; | |
} | |
function makeHorRegmarks(){ | |
for (var i = 0; i < numHorizontalRegmarks; i++){ | |
makeRegmark (topHorYpos, topHorXpos); | |
makeRegmark (botHorYpos, topHorXpos); | |
topHorXpos += horGap; | |
}; | |
} | |
makeHorRegmarks(); | |
//draw double bullet | |
topHorXpos = (perimeter[1]) - 18 - 4.5; | |
makeRegmark (topHorYpos, topHorXpos+144); | |
// calculate the number of vertical regmarks needed | |
var numVerticalRegmarks = Math.ceil(perimeter[3]/regmarksInterval)-1 ; | |
var verGap = (perimeter[3] + 4.5 + 18 + 4.5)/(numVerticalRegmarks+1); | |
var verYpos = perimeter[0]+4.5 +18 - verGap; | |
var leftVerXpos = (perimeter[1]) - 18 - 4.5; | |
var rightVerXpos = (perimeter[1] + perimeter[2]+4.5); | |
// add regmarks to the side if side is larger than 18 inches. | |
if (perimeter[3] > regmarksInterval){ | |
makeVerRegmarks (); | |
}; | |
function makeVerRegmarks(){ | |
for (var n = 0; n<numVerticalRegmarks; n++){ | |
makeRegmark (verYpos, leftVerXpos); | |
makeRegmark (verYpos, rightVerXpos); | |
verYpos -= verGap;} | |
} | |
} | |
var p = getPerimeter(); | |
makeOuterCut(p); | |
setRegmark(p); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is awesome! This will save a ton of time for us, great script! Is there a way to work it at different scales? 1/2, or 1/4 scale?