Copy link to clipboard
Copied
Have there been any new developments on CAD-style dimension tools for Illustrator?
There are some old discussions on the forums that I have read dozens of times over the years, and I am aware of Hot Door's CADtools plug-in, but I keep hoping for a less expensive alternative. CADtools looks brilliant, but it does about a million things that I do not need. I really just need basic dimension tools to mark the height and width of objects on 2D drawings.
Right now, we are manually drawing lines, adding the flat arrowheads, and then typing the dimensions - which is prone to human error.
Some people might call these technical drawings, but they are all files that we need to print on a large format printer. My clients just want to know what size the images are before we print them.
We used CorelDRAW about 10 years ago, and it had very useful dimension tools, but at the time it was a huge hassle because all of my clients provide Illustrator and/or InDesign files - and CorelDRAW had trouble reading them.
Are there any alternatives to what we are doing now, or is CADtools the only viable option?
Another script:
Re: Illustrator CS6 - Adding dimensional information to a drawing
And another:
EDIT: This appears to be the same script as previously posted.
https://raw.githubusercontent.com/adamdehaven/Specify/master/Specify.jsx
And one more:
.../*
Dimensioning - Nick Blakey 2007
This will add measurement marks and dimensions to any selected item.
This script requires that a swatch alre
Copy link to clipboard
Copied
Copy link to clipboard
Copied
Another script:
Re: Illustrator CS6 - Adding dimensional information to a drawing
And another:
EDIT: This appears to be the same script as previously posted.
https://raw.githubusercontent.com/adamdehaven/Specify/master/Specify.jsx
And one more:
/*
Dimensioning - Nick Blakey 2007
This will add measurement marks and dimensions to any selected item.
This script requires that a swatch already exist for the colour "Cutter" (or "cutter")
*/
var myDocument = app.activeDocument;
var selectedObject = myDocument.selection;
var activeLayer = app.activeDocument.activeLayer;
var layerName = activeLayer.name;
activeLayer.name = "Source4Measure";
// Get position of selection bounds
var myBounds = selectedObject[0].geometricBounds;
// Set up X and Y co-ordinates
var x1 = myBounds[0];
var x2 = myBounds[2];
var y1 = myBounds[1];
var y2 = myBounds[3];
// Set up data for the Measurements
var ptWidth = myBounds[2] - myBounds[0];
var ptHeight = myBounds[1] - myBounds[3];
var tmpWidth = Math.round(ptWidth / 0.02834645);
var tmpHeight = Math.round(ptHeight / 0.02834645);
var finalWidth = tmpWidth / 100;
var finalHeight = tmpHeight / 100;
//Find Centre of Object
var xCentre = x1 + (ptWidth / 2);
var yCentre = y1 - (ptHeight / 2);
// Find Cutter swatch position
var origSwatches = myDocument.swatches;
var swatchesLength = origSwatches.length;
for (i=0;i<swatchesLength;i++) {
if (origSwatches.name == "Black" || origSwatches.name == "black") {
var cutterSwatch = origSwatches;
}
}
// Check if Cutter swatch is defined
if (cutterSwatch == undefined) {
alert("Please create a cutter swatch");
}
else {
makeDimensions();
releaseLayer();
}
function makeDimensions() {
// Lock the active layer to prevent colour change
activeLayer.locked = true;
// Create Measurements Layer
//Now moved to separate function
/*var mLayer = myDocument.layers.add();
//mLayer.name = "Measurements";*/
mLayerCreate();
// Set Document colors to Cutter
myDocument.defaultFillColor = cutterSwatch.color;
myDocument.defaultStrokeColor = cutterSwatch.color;
// Create White Color Object for Measurement Boxes
newWhite = new CMYKColor();
newWhite.black = 0;
newWhite.cyan = 0;
newWhite.magenta = 0;
newWhite.yellow = 0;
// Create groups for measurements
var yMeasure = mLayer.groupItems.add();
yMeasure.name = "Height";
var xMeasure = mLayer.groupItems.add();
xMeasure.name = "Width";
// X Measurement Line and Endpoints
var xLine1 = xMeasure.pathItems.add();
xLine1.stroked = true;
xLine1.setEntirePath ([[x1,y1+36],[xCentre - 30,y1+36]]);
var xLine2 = xMeasure.pathItems.add();
xLine2.stroked = true;
xLine2.setEntirePath ([[xCentre + 30,y1+36],[x2,y1+36]]);
var xLineEnd1 = xMeasure.pathItems.add();
xLineEnd1.stroked = true;
xLineEnd1.setEntirePath ([[x1,y1+40],[x1,y1+32]]);
var xLineEnd2 = xMeasure.pathItems.add();
xLineEnd2.stroked = true;
xLineEnd2.setEntirePath ([[x2,y1+40],[x2,y1+32]]);
// Y Measurement Line and Endpoints
var yLine1 = yMeasure.pathItems.add();
yLine1.stroked = true;
yLine1.setEntirePath ([[x2+36,y1],[x2+36,yCentre + 30]]);
var yLine2 = yMeasure.pathItems.add();
yLine2.stroked = true;
yLine2.setEntirePath ([[x2+36,yCentre - 30],[x2+36,y2]]);
var yLineEnd1 = yMeasure.pathItems.add();
yLineEnd1.stroked = true;
yLineEnd1.setEntirePath ([[x2+32,y1],[x2+40,y1]]);
var yLineEnd2 = yMeasure.pathItems.add();
yLineEnd2.stroked = true;
yLineEnd2.setEntirePath ([[x2+32,y2],[x2+40,y2]]);
/* Create Box for X Measurement text
Deprecated by use of two lines in measurement line
var xBox = xMeasure.pathItems.rectangle (y1 + 46, xCentre - 30, 60, 20);
xBox.filled = true;
xBox.fillColor = newWhite;
xBox.fillOverprint = false;
xBox.stroked = false;*/
// Create Text for X Measurement
var xText = xMeasure.textFrames.add();
xText.contents = finalWidth + "mm";
xText.top = y1 + 42;
xText.left = xCentre;
xText.paragraphs[0].paragraphAttributes.justification = Justification.CENTER;
for (i=0;i<xText.textRange.characters.length;i++) {
xText.characters.characterAttributes.fillColor = cutterSwatch.color;
}
/* Create Box for Y Measurement Text
Deprecated by use of two lines in measurement line
var yBox = yMeasure.pathItems.rectangle (yCentre + 30, x2 + 26, 20, 60);
yBox.filled = true;
yBox.fillColor = newWhite;
yBox.fillOverprint = false;
yBox.stroked = false;*/
// Create Text for Y Measurement
var yText = yMeasure.textFrames.add();
yText.contents = finalHeight + "mm";
yText.rotate (-90); //, true, false, false, false, Transformation.CENTER);
yText.top = yCentre;
yText.left = x2 + 30;
yText.paragraphs[0].paragraphAttributes.justification = Justification.CENTER;
for (i=0;i<yText.textRange.characters.length;i++) {
yText.characters.characterAttributes.fillColor = cutterSwatch.color;
}
}
function mLayerCreate() {
var mLayerNotExists = true;
// Check if measurements layer exists
for(i = 0; i < activeDocument.layers.length; i++){
if(activeDocument.layers.name == "Measurements"){
mLayer = activeDocument.activeLayer = activeDocument.layers; // not using var to declare makes it global
mLayerNotExists = false;
}
}
// Create Measurements Layer
if(mLayerNotExists){
mLayer = myDocument.layers.add();// not using var to declare makes it global
mLayer.name = "Measurements";
}
}
function releaseLayer(){
for(i = 0; i < activeDocument.layers.length; i++) {
if(activeDocument.layers.name == "Source4Measure") {
activeDocument.layers.name = layerName;
activeDocument.layers.locked = false;
activeDocument.activeLayer = activeDocument.layers;
}
}
// Set Document colors back to Default
black = new CMYKColor();
black.black = 100;
myDocument.defaultFillColor = newWhite;
myDocument.defaultStrokeColor = black;
}
Copy link to clipboard
Copied
I taught a session a little about this at MAX a few years ago. I showed people how we were using the 3D features in Illustrator to build a library of specific depths, angles, perspectives, etc, for our clients product (a smart phone). The client always needed the same angles to match up between the different products.
Once you set the 3D appearance style you want, rather than typing the numbers in each time, save it as a Graphic Style in the Graphic Styles panel. We save a styles set of presets for that client that we can share amongst our peers/production artists so we are all consistent. This is very easy to manage and allows us to use the advanced 3D settings where we can set extra lighting, etc.
Hope that helps,
Copy link to clipboard
Copied
Well, it looks like Specify is the winner. I tried it initially and thought it could not do what I needed, but I was able to modify the code to make it work. My problem was that I work with very large prints, and the scaling feature did not use a large enough scale (many of my drawings need a 1/32 scale or even 1/50). Fortunately, the code was written in such a way that changing one number made it all work.
I also found and like using Specctr a lot. I would be willing to pay for it, but they no longer support Illustrator CS6 and their support seems to be abysmal. I've contacted them two different ways and have received no response about whether or not the older version of extension (which still supports CS6) is available as an option. I even paid for one month of service to see if I could get answers.
Find more inspiration, events, and resources on the new Adobe Community
Explore Now