Copy link to clipboard
Copied
Hi,everyone!
Recently I met a awful problem. I want to make a rectangle around current selection, but Not success.
Could you help me or give some clues? Thanks!
Which AI-version?
In CS3 this works for me:
...// Box4selectedPath.jsx
// for selected pathItems // CS3
// creates a green rectangle around all the selected paths (visibleBounds)
// regards pixxxelschubser
// http://forums.adobe.com/thread/1183584
var StrtPOrigin = app.activeDocument.pageOrigin;
var StrtROrigin = app.activeDocument.rulerOrigin;
app.activeDocument.pageOrigin = Array(0,0);
app.activeDocument.rulerOrigin = Array(0,0);
var aDoc = app.activeDocument;
var Sel = aDoc.selection;
var newRGBColor = ne
Copy link to clipboard
Copied
Try the following code.
Cheers Daniel
boundingbox();
function boundingbox()
{
// zet nulpunt linksonder
app.activeDocument.pageOrigin = Array(0,0);
app.activeDocument.rulerOrigin = Array(0,0);
// set variable
var breedte = app.activeDocument.width;
var hoogte = app.activeDocument.height;
var doc = app.activeDocument;
// omrekenfactor
var omf = 2.834645;
// maak lijnkleur aan
var newRGBColor = new RGBColor();
newRGBColor.red = 0;
newRGBColor.green = 255;
newRGBColor.blue = 0;
var black = new GrayColor();
black.gray = 100;
var layercheck = 0;
var targetDocument = app.activeDocument;
var layerCount = targetDocument.layers.length;
var a=1;
for (var i=1 ; i < 2; i++) {
if (a==1){var txt = ''; var layname = 'BB';};
var layercheck = 0;
for (u = layerCount -1; u >= 0; u--){
targetLayer = targetDocument.layers;
var layerName = new String (targetLayer.name);
if (layerName.indexOf(layname) == 0){
targetDocument.layers.visible= true;
targetDocument.layers.locked= false;
var layercheck = 1;
}
}
if (layercheck == 0){
newlayer = documents[0].layers.add();
newlayer.name = (layname);
newlayer.color = newRGBColor;
}
}
alignType = 'top';
mySelection = activeDocument.selection;
if (mySelection.length > 0) {
anchorBounds = getPosition(mySelection[0]);
var artLayer = doc.layers['BB'].groupItems.add();
targetDocument.layers['BB'].preview = false;
var breedte = bnds[2] - bnds[0];
var hoogte = bnds[1] - bnds[3];
var rect = artLayer.pathItems.rectangle ((bnds[1] + (20*omf)),(bnds[0] - (20*omf)), breedte + (40*omf), hoogte + (40*omf));
rect.filled = false;
rect.stroked = false;
} else {
anchorBounds = getDocPosition();
var doc = app.activeDocument;
var omtrekartwork = app.activeDocument.geometricBounds;
var leftartwork = omtrekartwork[0];
var topartwork = omtrekartwork[1];
var rightartwork = omtrekartwork[2];
var bottomartwork = omtrekartwork[3];
var origin = doc.rulerOrigin;
var leftpage = -origin[0];
var toppage = -origin[1] + doc.height;
var rightpage = -origin[0] + doc.width;
var bottompage = -origin[1];
var centerxpage = -origin[0] + doc.width/2;
var centerypage = -origin[1] + doc.height/2;
var bleedleft = leftpage - leftartwork;
var bleedright = rightartwork - rightpage;
var bleedtop = topartwork - toppage;
var bleedbottom = bottompage - bottomartwork;
var breedteartwork = rightpage - leftpage;
var hoogteartwork = toppage - bottompage;
if (bleedleft <= 0 && bleedright <= 0 && bleedtop <= 0 && bleedbottom <=0){
var artLayer = doc.layers['BB'].groupItems.add();
targetDocument.layers['BB'].preview = false;
var rect = artLayer.pathItems.rectangle ((toppage + (20*omf)),(leftpage - (20*omf)), (breedteartwork + (40*omf)), (hoogteartwork + (40*omf)));
rect.filled = false;
rect.stroked = false;
} else {
if (bleedleft >= bleedright){
var bleedx = bleedleft + (20*omf);
} else {
var bleedx = bleedright + (20*omf);
};
if (bleedbottom >= bleedtop){
var bleedy = bleedbottom + (20*omf);
} else {
var bleedy = bleedtop + (20*omf);
};
var artLayer = doc.layers['BB'].groupItems.add();
targetDocument.layers['BB'].preview = false;
var rect = artLayer.pathItems.rectangle ((toppage + bleedy),(leftpage - bleedx), (breedteartwork + (2*bleedx)), (hoogteartwork + (2*bleedy)));
rect.filled = false;
rect.stroked = false;
};
};
}
function getBounds(obj) {
var vbounds = new Array();
if( obj.typename == 'TextFrame' ) {
objcopy=obj.duplicate().createOutline();
vbounds = objcopy.visibleBounds;
objcopy.remove();
}
else if( (obj.typename == 'GroupItem') && !obj.clipped ) {
vbounds = getBounds(obj.pageItems[0]);
for( n=1; n<obj.pageItems.length; n++ ) {
vgb = getBounds(obj.pageItems
if( vbounds[0] > vgb[0] ) vbounds[0] = vgb[0];
if( vbounds[1] < vgb[1] ) vbounds[1] = vgb[1];
if( vbounds[2] < vgb[2] ) vbounds[2] = vgb[2];
if( vbounds[3] > vgb[3] ) vbounds[3] = vgb[3];
}
}
else if( (obj.typename == 'GroupItem') && obj.clipped && (obj.pageItems.length > 1) ) {
vbounds = getBounds(obj.pageItems[0]);
cvgb = getBounds(obj.pageItems[1]);
objleft = cvgb[0];
objtop = cvgb[1];
objright = cvgb[2];
objbottom = cvgb[3];
obj.pageItems[0].stroked ? so = 0 : so = 1;
for( n=so; n<obj.pageItems.length; n++ ) {
cvgb = getBounds(obj.pageItems
if( objleft > cvgb[0] ) objleft = cvgb[0];
if( objtop < cvgb[1] ) objtop = cvgb[1];
if( objright < (cvgb[2]) ) objright = cvgb[2];
if( objbottom > (cvgb[3]) ) objbottom = cvgb[3];
}
if( vbounds[0] < objleft ) vbounds[0] = objleft;
if( vbounds[1] > objtop ) vbounds[1] = objtop;
if( vbounds[2] > objright ) vbounds[2] = objright;
if( vbounds[3] < objbottom ) vbounds[3] = objbottom;
}
else {
vbounds = obj.visibleBounds;
}
return vbounds;
}
function getPosition(obj) {
var b = new Array();
bnds = getBounds(obj);
b['left'] = bnds[0];
b['top'] = bnds[1];
b['right'] = bnds[2];
b['bottom'] = bnds[3];
b['centerX'] = bnds[0] + (bnds[2]-bnds[0])/2;
b['centerY'] = bnds[1] - (bnds[1]-bnds[3])/2;
return b;
}
function getDocPosition() {
var b = new Array();
doc = activeDocument;
var origin = doc.rulerOrigin;
b['left'] = -origin[0];
b['top'] = -origin[1] + doc.height;
b['right'] = -origin[0] + doc.width;
b['bottom'] = -origin[1];
b['centerX'] = -origin[0] + doc.width/2;
b['centerY'] = -origin[1] + doc.height/2;
return b;
}
Copy link to clipboard
Copied
Thanks,Damienned.
But I want this script to get the green rectangle while selecting three rectangle in black stroke
Copy link to clipboard
Copied
Which AI-version?
In CS3 this works for me:
// Box4selectedPath.jsx
// for selected pathItems // CS3
// creates a green rectangle around all the selected paths (visibleBounds)
// regards pixxxelschubser
// http://forums.adobe.com/thread/1183584
var StrtPOrigin = app.activeDocument.pageOrigin;
var StrtROrigin = app.activeDocument.rulerOrigin;
app.activeDocument.pageOrigin = Array(0,0);
app.activeDocument.rulerOrigin = Array(0,0);
var aDoc = app.activeDocument;
var Sel = aDoc.selection;
var newRGBColor = new RGBColor();
newRGBColor.red = 0;
newRGBColor.green = 255;
newRGBColor.blue = 0;
if (Sel.length >0 ) {
var vBounds = Sel[0].visibleBounds;
vBounds_Li = vBounds[0];
vBounds_Ob = vBounds[1];
vBounds_Re = vBounds[2];
vBounds_Un = vBounds[3];
if (Sel.length >1 ) {
for (i=1; i<Sel.length ; i++) {
vBdsI = Sel.visibleBounds;
if( vBounds_Li > vBdsI[0] ) {vBounds_Li = vBdsI[0]};
if( vBounds_Ob < vBdsI[1] ) {vBounds_Ob = vBdsI[1]};
if( vBounds_Re < vBdsI[2] ) {vBounds_Re = vBdsI[2]};
if( vBounds_Un > vBdsI[3] ) {vBounds_Un = vBdsI[3]};
}
}
var aRectangle = aDoc.pathItems.rectangle(vBounds_Ob, vBounds_Li, vBounds_Re - vBounds_Li, vBounds_Ob - vBounds_Un);
aRectangle.strokeColor = newRGBColor;
aRectangle.strokeWidth= 2;
aRectangle.filled = false;
aRectangle.stroked = true;
aDoc.selection = null;
} else {
alert ("no selection")
}
app.activeDocument.pageOrigin = StrtPOrigin;
app.activeDocument.rulerOrigin = StrtROrigin;
Remember: only pathItems
Copy link to clipboard
Copied
Thanks,Pixxxel.
It works for me, very nice, Thank you again!
Copy link to clipboard
Copied
My pleasure!