Illustrator Scripting :: How To Debug Script Palette Button / Object
Jun 28, 2013
I've got a script that creates a palette that does some calculations when a button is pressed - but something in the script is failing silently. (this question is about how to debug things like this, not what the problem is in my specific script)
I've read the debugging tips in the Javascript tools guide, and based on that, re-opened the script in the Extendscript Toolkit instead of my usual text editor, chosen Illustrator, and hit the green 'Go' button. But, either I've missed something fundamental, or this isn't designed for palettes - the script runs in Illustrator, successfully pops up the palette, considers the job done, pats itself on the back, and closes the palette before I can begin debugging the button.
I'm looking for something where I can test the palette doing regular Illustrator work and see debug messages, set breakpoints, etc. I've tried the old-school approach of just filling the code with 'alert("blah")'s but it doesn't work - my code reaches an
and doesn't alert either of them, or give any error message.
If I was working in a browser, I'd just plonk in a "console.log( app.activeDocument.selection )" and browse the object structure to see what's going on, is there any Illustrator equivalent?
I have a palette with a button. I'd like to be able to repeat the button command if space or enter is pressed.
But I also may have preselected objects to base the command on (otherwise it needs a pickfirst selection).
For some reason SendStringToExecute clears the current selectionset and I need to reselect an entity.
While calling the Sub directly doesn't allow the command to be repeated and ignores the DR CommandMethod call.
Private Sub btnDraw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDraw.Click Dim doc As Document = Application.DocumentManager.MdiActiveDocument Dim mycommands As New Commands mycommands.Draw() 'doc.SendStringToExecute("DR ", True, False, True) End Sub <CommandMethod("DR")> _ Sub Draw()'If selectedobjects.count>0 then ... End Sub
I am writing a script for Illustrator. I created a palette with some buttons. I like to keep the palette open while working in Illustrator. The problem is, that the buttons don't work. For example, I have a delete button that should delete my active selection. When I change the Window Type from palette to dialog everything works correctly.
var w = new Window ("palette"); w.orientation = "row"; w.text = "Path Transform"; var f = File ("/C/icons/corner-tr.png"); var corner_tr = w.add ("iconbutton", undefined, f ); var corner_tl = w.add ("iconbutton", undefined, f ); var corner_br = w.add ("iconbutton", undefined, f ); var corner_bl = w.add ("iconbutton", undefined, f ); corner_tr.onClick = function () { selectedObject[0].remove(); createLines(); }
on my Windows 7 home computer I am able to create UI progress bars and popup messages for my UI window and everything works just fine. Now, I come to work on the Macintosh and they don't work so well. In this question, I would like to learn if there is a technique to bring a palette to the front when one is created, such as for this progress bar example, on a Mac. The palette appears deactivated and in back for me. It is unseen most of the time because it appears in the center of the screen behind the window by default, and when I move my window we can see the palette but there is no progress bar going on.
As you can see in the screenshot, my main window is deactivated because I attempted to get the progress bar active by deactivating the main window, obviously not successful. I also set the palette to active, which did not work.And, as I have implied, on my home computer on Windows things appear just as expected with the progress bar working and palettes appearing in front and active.
When I run a script that brings up a palette window from ExtenScript toolkit the window behaves as I expect.But when I load the same script from illustrator (ctrl+12) the window does not show, or is instantly closed.
I'm using a mac running illustrator cs5 and have about 4 thousand eps files (all vector paths filled with black) that need to be assigned colors randomly from a defined color palette (25 custom swatches). The first 2 swatches should be omitted- they aren't relevant to this task.
The script should open the file select all vector elements and assign a random color form the defined custom swatch palette then save the file and move on to the next.
I try to open mulitple ai files through palette dialog but it fails on Error:8702, there is no document. But if i change to var win = new Window ("dialog", "Batch"); the open file works well.
var txtSourceFolder = win.add("edittext",undefined); var btnOk = win.add("button",undefined,"Run"); btnOk.onClick=function(){ try
I was trying to do the cmd+shift+option+fn+F12 to calculate the area on an object and nothing happens..so i was reading on the Internet that adobe dropped this feature no longer exists is this true?
I am trying to add a prototype to the Layers object so I can do something like try{ .getByName(name) catch{ return null. For when the named layer doesn't exist. (It gives an error for me in CS5). So unfortunately me trying to go Layers.prototype. my method doesn't seem to work at all.
is there a way to get position of any selected object? It seems like normally you have to dive into specific item like textFrames to get position, but was curious if there was a generic way of doing this for selected objects.
Is there any way to move a object using its width? ex: "move to left a box with 10cm(width) using this value (10cm)". But I want to capture the width of any selected object.
Another thing: i want to select objects with same fillcolor and do something like: pathfinder>>add;
Is there a way to determine which object in a selection is the key object? For example: draw 10 squares on a layer, select all of them, click on one of the 10 and it becomes the Key Object (heavy border) for things like Distribute Spacing on the Align pallete. I can determine that a particular object is selected via ActiveDocument.Selection.PathItem[n].Selected = true/false. But I can't figure out how to find out if this is the KeyObject. The ultimate goal is to modify the below script so that it uses the KeyObject as the reference and not the object on the bottom-most layer.
Here is the Script - from [URL]
mySelection = activeDocument.selection; if (mySelection.length>0){ if (mySelection instanceof Array) {
I'm trying to build a map of the world that includes provinces and sub-provinces (counties). I will be animating it in AE. AE only sees the top layers so it is imparative that the name of the top layer corresponds the the correct province. Unfortunately all the provinces are not layers. They are objects. I can use the "Release to Layers" command to get all objects nested into top level layers. But the top level layers have generic names (Layer 1, Layer2, Layer 3). The objects nested within these layers have the correct name.
Is there a script that will rename the top level layer using the name given to the object nested within that layer? If not, how to create one?
Here's a link to one of the files: world_all_provinces_Senegal divisions. Level 1_area.zip
trying to make an object the exact size of the artboard. This is something I do on a daily basis for several different reasons and it would be very useful if this can happen automatically for whatever size the artboard may be. As I understand it the only way is with a script but I have no experience with making illustrator scripts, im definately no programmer. I have set up quickkeys in the past to copy from the artboard inputs when you are on the artboard tool but these round to the nearest .01 and this is not accurate enough for what I am working with. Also if I do this with multiple pages open illustrator is very slow to respond to the artboard tool.
Below is a script that I saw on here that I believe may contain what I need but now knowing programming. Where to start on editing. All I need is the part where an object is placed on the artboard that is the exact same size as the artboard.
#target illustrator function main() { if (app.documents.length == 0) { alert('Open a document before running this script'); return; // Stop script here no doc open… } else { var docRef = app.activeDocument; with (docRef) { if (selection.length == 0)
I'd like to select an object and have a script select all objects behind that object, within that objects bounds. I believe this is possible with z-order? But I've never worked with Z-orders before
When I run the script for an object selection, I want each object to have its color set to the underlying color as if I had used the eyedropper tool. Is this something that can be scripted?
Is there a way to simply select all object directly below an objects?
I found this script here but it doesn't seem to work.
//DESCRIPTION:Select Below // A Jongware Script if (app.documents.length && app.selection.length) { ypos = app.selection[0].visibleBounds[3];
[Code] .....
Here's an example file. I'm trying to select eveything below the yellow polygon.
This would be very useful in another project with many small objects bunch together below many larger objects. I want to group the small objects that are bellow the larger object together without having to manually select each objects (there are thousands of objects so a script would be ideal).
In prior versions of illustrator we used a script that basically saved the visible bounds of a masked object as an EPS file. With the upgrade to CS4 and Multiple Artboards this save function (EPSSaveOptions) no longer does the same visible bounds. I have read several post of similar issues, but what I am asking is:
In there a way to make the visible bounds of the eps file equal the artboard on the active artboard only? The artboard seems to be driving the crop box. When I manually save the file as EPS the visible bounds are correct. When I save from the script it is not? As with other posts I do not want to go backwards within compatibility...I would like to keep the file at the CS4 level. What command am I missing? We have tried making the crop box = visibleBounds to no avail.
I need the finished script to create a rectangle with no fill and a 20% gray stroke to outline each artboard. I dug this up off these boards, which works perfectly except the rectangles created have no fill or stroke. certainly save me a lot of time drawing rectangles on a daily basis.
#target illustrator var docRef = app.activeDocument; var artboardRef = docRef.artboards; for(i=0;i<artboardRef.length;i++){ var top=artboardRef[i].artboardRect[1] ; var left=artboardRef[i].artboardRect[0]; var width=artboardRef[i].artboardRect[2]-artboardRef[i].artboardRect[0]; var height=artboardRef[i].artboardRect[1]-artboardRef[i].artboardRect[3]; var rect = docRef.pathItems.rectangle (top, left, width, height); rect.fillColor = rect.strokeColor = new NoColor(); }
Almost every time I add a linear gradient to an object I want to change the angle from 0 to 90 degrees.
Is there a script that I could use for this, so that I could assign a keyboard shortcut and press that instead of clicking the box & typing 90 all the time? (i.e. select an object, run a script & it would apply the standard black to white linear gradient at 90 degrees instead of 0.)
I'd like to make a button for the toolbar or the tool palette that will print consistently every time I use it.
For an example, I want to click this button that has the parameters for ADOBE PDF, 11x17, Lanscape, a certain Plot style table, etc......
I want to make a button for each print setting I use.
HOW...HOW can this be done? my inquiring mind wants to know!!
Having this little button will just me me that much more proficient, and ever bit of time certainly counts when under pressure to get out some drawings.
I'm try to automate the importing of the Varaible and datasets into my graphs via Scripting, but the ImportVaraibles() function doesn't seem to work. Here is my Script, mostly copied from the example script provided with Illustrator (CS5). And, this works manually, using the file names in the script, via Load Variable Library
Set appRef = CreateObject(strIllistratorVersion)
'Open the file and import the datasets Set docRef = appRef.Open(strTemplate & "200-500.ai") 'docRef.Datasets.RemoveAll docRef.Variables("Yearbook").Delete
Here is the problem, after I delete the previous library, then this next line, right from the example, does nothing The script then exits with 'No Datasets in this document'
docRef.ImportVariables (strXMLFolder & "Lumber_200-500.xml") 'appRef.DoJavaScript "alert('Template:" & strTemplate & strRange & ".ai | XML file:" & strXMLFolder & "" & objFile.Name & "^')" If (appRef.Documents.Count > 0) Then Set docRef = appRef.Documents(1)
[Code]....
If I remove that delete line, the script runs, but just uses whatever Variables I had last loaded, not the XML file.
It's simply not loading. What do I need to do to get it to load?