ai脚本建立点到点的连线

作者:胡说八道转稿 来源:飞特会员投稿教程 浏览次数:加载中... 网友评论 0

这篇教程像飞特的ai爱好者们介绍用ai脚本建立点到点的连线这个脚本是将对象上能互相连接的点做一个连接。示例如图:ai脚本建立点到点的连线 飞特网 ai教程fevte编注:更多ai教程讨论及ai作品交流请到飞特论坛ai交流区:http://bbs.fevte.com/forum-52-1.html
连接之后类似于曼陀罗的形状。在多边形、星型或者手绘图形上也试试吧。
点最好多一些,这样能得到更好的形状;较少的点可能没有什么变化。

要用“文件-脚本”来使用,以cs3为例应放在"c:\program files\adobe\adobe illustrator cs3\预设\脚本"下。
当然,也可以放置在其他文件夹中,通过ctrl+f12定位到脚本所在处来使用。
复制以下全部文字到记事本中,保存为以.js结尾的脚本文件(如:脚本.js)即可。

/////////////////////////////////////////////////////////////////
// all points v.1.3 -- cs,cs2,cs3,cs4
//>=--------------------------------------
// this script simply draws a line from every point to every other point of your selected pathitem.
// handy for making mandalas. try on polygons, stars or even freehand shapes.
//>=--------------------------------------
// js code (c) copyright: john wundes ( john@wundes.com ) www.wundes.com
//copyright full text here: http://www.wundes.com/js4ai/copyright.txt
//////////////////////////////////////////////////////////////////
function loadbar(x){
   this.versionnum= app.version.split(".")[0] ;
if (this.versionnum >= 13){
   this.w = new window('window', "processing...", undefined, {independent:true});
   this.w.framelocation = [600,400];
   this.w.tracker = this.w.add ('statictext' , [15,15,250,35], "processing");
   this.w.prog = this.w.add ('progressbar' , [15,15,250,35], 0, x);
   //this.w.show();
}
}

loadbar.prototype.close = function(){
if (this.versionnum >= 13){
    this.w.close();
}
}
loadbar.prototype.hide=function(){
if (this.versionnum >= 13){
    this.w.hide();
}
}
loadbar.prototype.show=function(){
if (this.versionnum >= 13){
    this.w.show();
}
}
loadbar.prototype.update=function(x){
if (this.versionnum >= 13){
   this.w.prog.value = x;
}
}
loadbar.prototype.label=function(x){
if (this.versionnum >= 13){
    this.w.tracker.text = x;
}
}

array.prototype.indexof = function(i){
var len = this.length;
for (var a=0;a<len;a++)
{
   if (this[a]==i)
   {
    return a;
   }
   return -1;
}
}

array.prototype.man = function(test, tvars_arr, dothis, dovars_arr) {
var fun="function";
var obj="object";
var und="undefined";
var a=typeof test;
var b=typeof tvars_arr;
var c=typeof dothis;
var d=typeof dovars_arr;
// if only an array is given, it is assumed we wish to copy to it:
if (a==obj && tvars_arr ==undefined && dothis==undefined && dovars_arr==undefined)
{
   dovars_arr = test;
   test=undefined;
}
//if we just want to process all items without any testing:   dothis,[dovars_arr]     fun,ob
if (a==fun && b==obj && dothis==undefined && dovars_arr==undefined)
{
   //alert("correct");
   dothis=test;
   test=undefined;
   dovars_arr=tvars_arr;
   tvars_arr=undefined;
}else if(a==fun && b==fun){   //    fun,fun or fun,fun,ob
   if (c==obj)
   {
    dovars_arr=dothis;
   }
   dothis=tvars_arr;
   tvars_arr=undefined;
}
// either case should work as normal: fun,ob,fun    or   fun,ob,fun,ob
// now set defaults if anything is missing:
test= test==undefined?amt_exists:test;
tvars_arr= tvars_arr==undefined?[0]:tvars_arr;
dothis= dothis==undefined?ama_exportto:dothis;
dovars_arr= dovars_arr==undefined?[0]:dovars_arr;
//
var sl = this.length;
for (var ds = 0; ds<(sl-1); ds++) {
   //first referenced function call
   if (test(this[ds], tvars_arr)) {
    // second referenced function call
    var ret = dothis(this[ds], dovars_arr);
    //change original array item if something is returned
    if (ret != undefined) {
     this[ds] = ret;
    }
   }
}
}
//default test:
function amt_exists(item, y_arr) {
//filler function for arrayman
//always true
return 1;
}
//default action:
// exports each tested item to exp_arr
function ama_exportto(item, exp_arr) {
//alert(item);
exp_arr.unshift(item); //unshift because the array is being processed backwards.
}
function ama_linesto(item, vars_arr) {
var count = vars_arr[0];
var group = vars_arr[1];
var src_arr = vars_arr[2];
var sal = src_arr.length;
// draw a line from this point, to every remaining point in the array
if (count == sal-1)
{
   //alert("last one");
   return
}

//

for (var p=(count+1);p<sal ;p++ )
{
   var myline = drawline(item.anchor, src_arr[p].anchor);
  
   /*            // uncomment for some fun grayscale action
   var col=255/(sal/(count+1));
   myline.strokecolor.red = col;
   myline.strokecolor.green= col;
   myline.strokecolor.blue = col;
   */
  
   b.update(p);
   b.label("item:"+(s+1)+" of "+sellen+". (node "+count+" of "+(sal-1)+")");
   //redraw();
   //alert("drawing count:"+count+"\nindex of "+item+" in:"+src_arr+":"+src_arr.indexof(item));
}

vars_arr[0]++; //note: count++ doesnt work
}

function drawline(anchor1,anchor2) {
//alert(anchor1+" and "+anchor2);
   //draw a single line from point a to point b
   var linepath = shapegroup.pathitems.add();
   var offset=0; // [anchor1[0]-offset,anchor1[1]-offset]
   linepath.setentirepath( array(anchor1,anchor2) );
   linepath.closed = false;
   linepath.stroked = true;
   linepath.filled = false;
   linepath.strokewidth = 1;
   return linepath;

}

//----------------main

alert0="请打开一个文档";
alert1="只能对单一对象生效!\n不能是剪切蒙版、复合路径、复合形状、群组等!";

if ( app.documents.length == 0 ) {
   alert(alert0);
}else if (app.activedocument.selection.length == 0){
alert(alert1);
}else if (app.activedocument.selection[0].typename != "pathitem"){
alert(alert1);
}else{
doc=activedocument;
sel=doc.selection;
sellen=sel.length;
// walk through each selected item
for (var s=0;s<sellen ;s++ )
{
   if (sel[s].typename == "pathitem")
   {

    var b = new loadbar(sel[s].selectedpathpoints.length);
    b.show();
    var obj = sel[s];
    var src_arr = obj.selectedpathpoints;
    var count = 0;
    var shapegroup = app.activedocument.groupitems.add();
    src_arr.man(ama_linesto,[count,shapegroup,src_arr]);
    b.close();

   }

}

}

[错误报告] [推荐] [收藏] [打印] [关闭] [返回顶部]

  • 飞特网大部分教程属网友投稿,并不代表飞特网立场。如果您的教程在飞特网发布后没有注明作者和出处请联系我们处理。
    飞特网会员发布的所有作品版权规作者所有,未经作者同意,任何人不得将其用于商业目的;
    如发现本站有含色情等违反国家法律法规内容的图片及涉及个人肖像权及版权的内容,请即时通知我们,飞特网将立刻删除相关内容.本站原创内容,欢迎转载.请注明出处和作者,谢谢!
    访问本站推荐使用分辨率1280*1024,internet explorer7.0浏览器。