// Fireworks AutoShape // Install by copying to Fireworks/Configuration/AutoShapes/ // Run in Fireworks via the Window > AutoShapes // 2007 Aaron Beall - http://abeall.com // Version 1.1 var dom = fw.getDocumentDOM(); var mouse = smartShape.currentMousePos; var cps = smartShape.elem.controlPoints; var operation = new Object(); operation.InsertSmartShapeAt = function(){ smartShape.elem.elements[0] = new Path(); smartShape.elem.elements[0].contours[0] = new Contour(); smartShape.elem.elements[0].contours[0].isClosed = true; var nods = smartShape.elem.elements[0].contours[0].nodes; nods.length = 1; SetNodePosition(nods[0], AddPoints(mouse, {x:0, y:0})); cps.length = 1; SetControlPoint(cps[0], nods[0], "Origin", "Origin: Drag to change angle of effects on all selected elements. Alt-drag to affect all elements on the canvas."); cps[0].type = 'crossHair'; } operation.BeginDragControlPoint = function(){ var parms = smartShape.GetDefaultMoveParms(); var nods = smartShape.elem.elements[0].contours[0].nodes; var cp = smartShape.currentControlPoint; var origin = {x:cps[0].x, y:cps[0].y}; cp.RegisterMove(parms); nods[0].RegisterMove(parms); } operation.EndDragControlPoint = function(){ if (smartShape.altOptKeyDown){ var lyrs = dom.frames[dom.currentFrameNum].layers; for(var n in lyrs){ setEffectAngles(lyrs[n].elements); } }else{ setEffectAngles(fw.selection); } } SetNodePosition = function(node, pt){ SetBezierNodePosition(node, pt,pt,pt); } SetBezierNodePosition = function(node, ptp, pt, pts){ node.predX = ptp.x; node.predY = ptp.y; node.x = pt.x; node.y = pt.y; node.succX = pts.x; node.succY = pts.y; } SetControlPoint = function(cp, pt, name, toolTip){ cp.x = pt.x; cp.y = pt.y; cp.name = name; cp.toolTip = toolTip; } AddPoints = function(pt1, pt2){ return {x:pt1.x + pt2.x, y:pt1.y + pt2.y}; } if (operation[smartShape.operation]) operation[smartShape.operation](); function setEffectAngles(elems){ for(var i in elems){ var amount = Math.atan2((elems[i].left+(elems[i].width/2)-cps[0].x), (elems[i].top+(elems[i].height/2)-cps[0].y))/(Math.PI/180)-90; if(!elems[i].effectList)continue; var effs = elems[i].effectList.effects; for(f in effs){ if(effs[f].EffectIsVisible){ var eff = {}; for(var p in effs[f]){ if(p!='javascriptString')eff[p] = effs[f][p]; } if(eff.ShadowAngle!=undefined)eff.ShadowAngle = amount; if(eff.angle!=undefined)eff.angle = amount; if(eff.LightAngle!=undefined)eff.LightAngle = eff.name == 'Inset Emboss' ? amount : amount-180; if(eff.motion_blur_angle!=undefined)eff.motion_blur_angle = amount-180; effs[f] = eff; } } } }