Skip to content

Instantly share code, notes, and snippets.

@sojack
Created July 16, 2015 14:36
Show Gist options
  • Save sojack/b200b8bab00433c8cc9c to your computer and use it in GitHub Desktop.
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 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);
@srthrfrdMoss
Copy link

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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment