LoginSignup
5
4

More than 3 years have passed since last update.

AE 去年作成したLINEのやりとり画面作成スクリプト

Last updated at Posted at 2019-06-10

去年に作成したラインのやり取りアニメーションスクリプト公開しときます。
とりあえずコードだけアップしておきます。
CSVのフォーマットに記入するだけで、自動でラインのやり取りを作ってくれるやつです。

line

var thisFile = new File(this); //jsxのファイルを取得
var thisFolderPath = thisFile.path; //jsxのフォルダパスを取得

//~ ライブラリ読み込み
#include '/d/Dropbox/aftereffects%20script/lib/ytLib.jsxinc'
{//==============================変数宣言==============================

var myCsvFile = new Object();//CSVファイル
var csv= [];//全データ
var iconGrp = [];
var icon_button_Text = []; //UIのset Picture icon Panel内 名前
var icon_button = [];//UIのset Picture icon Panel内 ボタン
var date = new Date; // CreateTime

var UI = {
defaultName : 'Unknown : ',    
};

var Num ={
icon_Default_Set : Number (5),
}

}//==============================変数宣言==============================

{//==============================ScriptUI Panel==============================
{//初期ウィンドウ

    var winObj = (this instanceof Panel) ? this : new Window('palette', 'Line auto TimeLine', undefined, {resizeable: true});

}

{//コンテンツグループ

    var contentsGrp = winObj.add('group',undefined,'contentsGrp');
    contentsGrp.orientation = 'column';

}

{//バナー表示

    try{
        var myBannerPath = new File (thisFolderPath+'/youtool_common/Ae_Script_banner.png');
        var banner = contentsGrp.add('image',undefined,myBannerPath);
        banner.alignment = [ScriptUI.Alignment.LEFT,ScriptUI.Alignment.CENTER];
    }
    catch(e){
    }

}//バナー表示

{//CSVの読み込みボタン

    var csv_Grp =  contentsGrp.add('group',undefined,'csv_Grp');
    csv_Grp.orientation = 'row';
    csv_Grp.alignment = [ScriptUI.Alignment.FILL,ScriptUI.Alignment.CENTER];
    var csv_Grp_stTxt = csv_Grp.add('statictext',undefined,'CSVFile:');
    //csv_Grp_stTxt.alignment = [ScriptUI.Alignment.FILL,ScriptUI.Alignment.CENTER];
    var csv_button = csv_Grp.add('button',undefined,'ImportCsv');
    csv_button.alignment = [ScriptUI.Alignment.FILL,ScriptUI.Alignment.CENTER];

}//CSVの読み込みボタン

{//背景画像を選択

    var Icon_UI_Grp = contentsGrp.add('panel',undefined,'set Picture icons');
    Icon_UI_Grp.orientation = 'column';
    Icon_UI_Grp.alignment = [ScriptUI.Alignment.FILL,ScriptUI.Alignment.CENTER];
    for ( var i = 0 ; i < Num.icon_Default_Set ; i ++ ){
        iconGrp[i]=Icon_UI_Grp.add('group',undefined,'');
        iconGrp[i].orientation = 'row';
        iconGrp[i].alignment = [ScriptUI.Alignment.FILL,ScriptUI.Alignment.CENTER];
            icon_button_Text[i]=iconGrp[i].add('staticText',undefined,UI.defaultName);
            icon_button_Text_a =iconGrp[i].add('staticText',undefined,':');
            icon_button[i]=iconGrp[i].add('button',undefined,'Select Picture');
            icon_button[i].alignment = [ScriptUI.Alignment.FILL,ScriptUI.Alignment.CENTER];
    }
    Icon_UI_Grp.enabled = false; 

}//背景画像を選択

{//LINE背景画像読み込みボタン

    var BG_UI_Grp =  contentsGrp.add('group',undefined,'csv_Grp');
    BG_UI_Grp.orientation = 'row';
    BG_UI_Grp.alignment = [ScriptUI.Alignment.FILL,ScriptUI.Alignment.CENTER];
    var BG_UI_Grp_button = BG_UI_Grp.add('button',undefined,'背景画像を選択');
    BG_UI_Grp_button.alignment = [ScriptUI.Alignment.FILL,ScriptUI.Alignment.CENTER];

}//LINE背景画像読み込みボタン

{//音設定

    var sound_Setting_Grp = contentsGrp.add('group',undefined,'contentsGrp');
    sound_Setting_Grp.orientation = 'row';
    sound_Setting_Grp.alignment = [ScriptUI.Alignment.LEFT,ScriptUI.Alignment.CENTER];
    var sound_Setting_Checkbox = sound_Setting_Grp.add('checkbox');
    var sound_Setting_infTxt = sound_Setting_Grp.add('statictext',undefined,'着信音を設定する')


    var sound_Button_Grp = contentsGrp.add('group',undefined,'contentsGrp');
    var receive_button = sound_Button_Grp.add('button',undefined,'相手の音');
    var send_button = sound_Button_Grp.add('button',undefined,'自分の音');
    var information_button = sound_Button_Grp.add('button',undefined,'コメントの音');
    sound_Button_Grp.enabled = false; 

}//音設定

{//MSG投稿の時間の設定

    var time_Setting_Grp = contentsGrp.add('group',undefined,'contentsGrp');
    time_Setting_Grp.orientation = 'row';
    time_Setting_Grp.alignment = [ScriptUI.Alignment.LEFT,ScriptUI.Alignment.CENTER];
    var time_Setting_Checkbox = time_Setting_Grp.add('checkbox');
    var time_Setting_infTxt = time_Setting_Grp.add('statictext',undefined,'TimeSetting')
    time_Setting_Checkbox.value = false;

    var time_Setting_add_Grp = time_Setting_Grp.add('group',undefined,'contentsGrp');
    time_Setting_add_Grp.orientation = 'row';
    time_Setting_add_Grp.alignment = [ScriptUI.Alignment.LEFT,ScriptUI.Alignment.CENTER];
    var time_Setting_Etxt_hours = time_Setting_add_Grp.add('edittext',undefined,'23');
    var time_Setting_STxt_Hours = time_Setting_add_Grp.add('statictext',undefined,'H');
    time_Setting_add_Grp.enabled = false; 

}//MSG投稿の時間の設定

{
    var buttonGrp = contentsGrp.add('group',undefined,'csv_Grp');
    buttonGrp.orientation = 'row';
    buttonGrp.alignment = [ScriptUI.Alignment.FILL,ScriptUI.Alignment.CENTER];
}

{//リセットボタン

    var Reset_Grp =  buttonGrp.add('group',undefined,'csv_Grp');
    Reset_Grp.orientation = 'row';
    Reset_Grp.alignment = [ScriptUI.Alignment.FILL,ScriptUI.Alignment.CENTER];
    var Reset_Grp_button = Reset_Grp.add('button',undefined,'Clear');
    Reset_Grp_button.alignment = [ScriptUI.Alignment.FILL,ScriptUI.Alignment.CENTER];

}//リセットボタン    



{//確認用ボタン

    var Check_Grp =  buttonGrp.add('group',undefined,'csv_Grp');
    Check_Grp.orientation = 'row';
    Check_Grp.alignment = [ScriptUI.Alignment.FILL,ScriptUI.Alignment.CENTER];
    var Check_Grp_button = Check_Grp.add('button',undefined,'Do it');
    Check_Grp_button.alignment = [ScriptUI.Alignment.FILL,ScriptUI.Alignment.CENTER];

}//確認用ボタン

{//winObj表示に関して

    winObj.onResizing = winObj.onResize = function () {this.layout.resize();};  

    if (winObj instanceof Window) {  
        winObj.center();  
        winObj.show();  
    }
    else {  
        winObj.layout.layout(true);  
        winObj.layout.resize();  
    }

}//winObj表示に関して

}//~==============================ScriptUI Panel==============================

{//==============================ScriptUI Actions==============================
//CSVの読み込みボタン
csv_button.onClick = function(){
    csvAllCheck();
    doit_csv_Obj()
    buttonEdit()
}

//リセットボタン
Reset_Grp_button.onClick = function(){
    myCsvFile= new File();//myCsvFileの中身を空にする
    csv= [];//空にする
    csv_button.text = 'ImportCsv'//ボタンの名前を初期化
    NameReset();
    Icon_UI_Grp.enabled = false; 
    icon_Pics = [] ;
    bg_pics = new File();
    BG_UI_Grp_button.text = '背景画像を選択';
    soundFile.receive = new Object();
    soundFile.send = new Object();
    soundFile.information = new Object();
    receive_button.text ='相手の音';
    send_button.text ='自分の音';
    information_button.text ='コメントの音';
    sound_Button_Grp.enabled = false;

}

//確認用ボタン
Check_Grp_button.onClick = function(){
    Ae()
}

//背景画像を選択 Button
BG_UI_Grp_button.onClick = function(){
    (function load(){
    bg_pics = new File();
    var fileName = File.openDialog("Select csv file","");
        if (fileName){
            bg_pics= new File(fileName); 
        }
        else{
            bg_pics = false;
        }
    return bg_pics;
    })();

    BG_UI_Grp_button.text = textOvershort(decodeURI($ytLib.getPathName(bg_pics,1)),10);
}
//MSG投稿の時間の設定ボタン
time_Setting_Checkbox.onClick = function(){
    if (time_Setting_Checkbox.value){
        time_Setting_add_Grp.enabled = true;    
    }
    else{
        time_Setting_add_Grp.enabled = false;    
    }   
}

sound_Setting_Checkbox.onClick = function(){
    if (sound_Setting_Checkbox.value){
        sound_Button_Grp.enabled = true;    
    }
    else{
        sound_Button_Grp.enabled = false;    
    }   
}

{//select icon picture Button

for (var i = 0 ; i < Num.icon_Default_Set ; i ++){
icon_buttonOnClick(i)
}
function icon_buttonOnClick(n){
    icon_button[n].onClick=function(){
        icon_Picture_File (n);
        icon_button[n].text = textOvershort(decodeURI($ytLib.getPathName(icon_Pics[n],1)),10);
    }

    function icon_Picture_File (n){
        var fileName = File.openDialog("Select csv file","");
        if (fileName){
            icon_Pics[n]= new File(fileName); 
        }
        else{
             false;
        }
    } 
}

}//select icon picture Button

{//音源ボタン
receive_button.onClick = function(){
var tmpfile ;
tmpfile= new Object();
tmpfile = FileOpen ();
receive_button.text = textOvershort(decodeURI($ytLib.getPathName(tmpfile,1)),10);
AE_sound_Path[0]=tmpfile;
}
send_button.onClick = function(){
var tmpfile ;
tmpfile= new Object();
tmpfile = FileOpen ();
send_button.text = textOvershort(decodeURI($ytLib.getPathName(tmpfile,1)),10);
AE_sound_Path[1]=tmpfile;
}
information_button.onClick = function(){
var tmpfile ;
tmpfile= new Object();
tmpfile = FileOpen ();
information_button.text = textOvershort(decodeURI($ytLib.getPathName(tmpfile,1)),10);
AE_sound_Path[2]=tmpfile;
}

function FileOpen (str){
    var tmp;
    var fileName = File.openDialog(str,"");
    if (fileName){
       tmp= new File(fileName); 
    }
    else{
         tmp = false;
    }
return tmp;
} 

}//select icon picture Button


}//==============================ScriptUI Actions==============================
{//==============================Functions==============================

{//★★★★CSVデータのチェック

function csvAllCheck(){
/*
    ①myCsvFileにオブジェクトを入れる
    ②csv_buttonの名前を変更する
*/

csvFile ();//csvファイルを読み込む
if ( !myCsvFile ){ return false ;}//csvFile()でbooleanを求める trueなら次へ
var shotrNameFile = textOvershort(decodeURI($ytLib.getPathName(myCsvFile,1)),20);
if ( myCsvFile ){csv_button.text = shotrNameFile ;}else{ return false;}//ボタンの名前を変更

}//csvAllCheck()

}//★★★★CSVデータのチェック


{//myCsvFileを配列CSVに格納
function doit_csv_Obj(){
    var myText= '';
    if (myCsvFile.open("r")){
        while(!myCsvFile.eof){
            var tempLine = myCsvFile.readln();
            if(countStr(tempLine,"\"")%2 == 0) {
                myText = myText + tempLine+"\n";
            }
            else {
                myText = myText + tempLine+"\r";
                while(true){
                    tempLine = myCsvFile.readln();
                    if(countStr(tempLine,"\"")%2 == 1) {
                        myText = myText + tempLine+"\n";
                        break;
                    }
                    else {
                        myText = myText + tempLine+"\r";
                    }
                }
            }
        }
        myCsvFile.close();
    }
    function countStr(str,seq) {
        return str.split(seq).length - 1;
    }
    var tmp = myText.replace(/"/g,"").split("\n");
    for( var i=0 ; i < tmp.length ; i ++ ){
        csv[i] = tmp[i].split(',');
    };
}//myCsvFileを配列CSVに格納

}

{//文字列を制限して末尾に...を追加する

function textOvershort(target,n){
    var resultStr = '';
    var tempArray = [];
    var count = 0 ;
    for (var i = 0 ; i < target.length ; i ++){
        count = count + getLen(target[i]);
        if (count <= n){
            tempArray.push(new Array (target[i]))
        }else{
        tempArray.push('...')
        break ;    
        }
    }
resultStr = resultStr + tempArray.toString().replace(/,/g,'')
return resultStr;
}

}//文字列を制限して末尾に...を追加する

{ //ScriptUIの名前を変更とボタン無効と有効

function buttonEdit(){
NameReset()//一度名前をリセットする
    var tempName = [];
    for ( var i = 7 ; i < csv[2].length ; i++){
        if (csv[2][i] !== ''){
            tempName.push(csv[2][i]);
        }
        else{
            false;
        }
    };
//~ arrCheck1(tempName)
    for (var i = 0 ; i < tempName.length ; i++){
        icon_button_Text[i].text = tempName[i]
    };

Icon_UI_Grp.enabled = true; //パネルをアクティブにする

    //人数の分だけgrpをアクティブにする
    for ( var i = 0 ; i < Num.icon_Default_Set ; i++){
        if ( i  < tempName.length-1 ){
            iconGrp[i].enabled = true;
            }
        else{
            iconGrp[i].enabled = false;
        }
    };

};  
} //ScriptUIの名前を変更とボタン数削除

{//名前を全てリセット
function NameReset(){
    icon_Pics=[];
    for (var i = 0 ; i < Num.icon_Default_Set ; i++){
        icon_button_Text[i].text = UI.defaultName;
        icon_button[i].text = 'Select Picture';
    }
};
}//名前を全てリセット

{//CSV load
function csvFile (){
    myCsvFile = new File();
    var fileName = File.openDialog("Select csv file","");
    if ( $ytLib.getPathName(fileName,2) == 'csv'){
        myCsvFile= new File(fileName); 
    }
    else{
        alert('csvファイルを選択して下さい。');
         myCsvFile = false;
    }
    return myCsvFile;
}; 
}//CSV load


}//==============================Functions==============================


{//============================== Method ==============================

{//全角半角の文字をカウント

function getLen(str){ //引数文字列
  var result = 0;
  for(var i=0;i<str.length;i++){
    var chr = str.charCodeAt(i);
    if((chr >= 0x00 && chr < 0x81) ||
       (chr === 0xf8f0) ||
       (chr >= 0xff61 && chr < 0xffa0) ||
       (chr >= 0xf8f1 && chr < 0xf8f4)){
      //半角文字の場合は1を加算
      result += 1;
    }else{
      //それ以外の文字の場合は2を加算
      result += 2;
    }
  }
  //結果を返す
  return result;
};

}//全角半角の文字をカウント

{//文字列を制限して末尾に...を追加する

function textOvershort(target,n){
    var resultStr = '';
    var tempArray = [];
    var count = 0 ;
    for (var i = 0 ; i < target.length ; i ++){
        count = count + getLen(target[i]);
        if (count <= n){
            tempArray.push(new Array (target[i]))
        }else{
        tempArray.push('...')
        break ;    
        }
    }
resultStr = resultStr + tempArray.toString().replace(/,/g,'')
return resultStr;
};

}//文字列を制限して末尾に...を追加する


function arrCheck (target){
    for (var i = 0 ; i < target.length ; i ++ ){
            for ( var j = 0 ; j <target[i].length ; j ++){
//~                     $.writeln('['+i+']['+j+']'+target[i][j]);
            }
    }
}

function arrCheck1 (target){
    for (var i = 0 ; i < target.length ; i ++ ){
//~         $.writeln('['+i+']'+target[i]);
    }
}

function icon_Pics_check(){
    for ( var i = 0 ; i < Num.icon_Default_Set ; i++){
//~         $.writeln('icon_Pics['+i+']='+icon_Pics[i])
    }
}

}//============================== Method ==============================

{//============================== AE 変数 ==============================
var AeName ={
    commonFolder : new Object(),
    soundFolder : '_sounds',
    image : '_images',
};

var AeObj = {
    soundFolderObj : new Object(),
    imageFolderObj : new Object(),
    backgroundObj : new Object(),
    overRayObj : new Object(),
};

var soundFile ={
receive : new Object(),
send : new Object(),
information : new Object(),
};

var AeComp = {
Final : new Object(),
}

var AeFolder = {
main : new Object(),
comp : new Object(),
Final : new Object(),
msg : new Object(),
icon : new Object(),
};

var common = {
shortSpel : 30 ,
shortSpel01 : 15 ,
textSpeed : 0.2,
};

var padding = {
    grp1:  55 ,
    grp3 : 12, //アイコンの位置 パディング
    grp5 : 130, //名前レイヤーのパディング
    ShapeL: 150, //左からのmargin★
    text_Rect_margin : 60 ,
    Top : 5 ,
    ShapeR : 50, //左からのmargin★
    roundness : 40,//contents areaの角丸
    arrow : 30,
    ArrowR :30, //コメントシェイプのパディング(自分)
    tlm :10, //time layer margin

};

var icon_Pics = [] ;//アイコン用の配列
var bg_pics = new File();//背景
var personsFolder = [];
var icon_pics_Obj_Path = [];
var AE_sound_Path = [];
var AE_sound_Obj = [];
var personName =[] ; //名前
var icon_Comp_Obj = [];
var resultDateArray = [] ;//投稿時間

var fSize = {
timeline : Number (45),
name : Number (30),
infomation : Number (35),
kidoku : Number (30),
title :Number (57),
};

var fill = {
color1: $ytLib.Color ('FFFFFF'),
color2 :$ytLib.Color ('000000'),
bgComp: $ytLib.Color ('6E9E82'),
myMassage :$ytLib.Color( 'B2ED8B'),
infomation: $ytLib.Color('365177'),
receive : $ytLib.Color ('FFFFFF'),
}

var fontF = {
main: String ("rounded-l-mplus-2p-medium"),
info :String ("GenShinGothic-Heavy"),
}
}//============================== AE 変数 ==============================

{//============================== AE expression ==============================
var expression = new Object();
expression.position = String(
'var CinLNum = thisComp.numLayers;\
var myIndexNum = thisLayer.index;\
var firstposition = 260;\
var bottomPosition = 1750;\
var pad = 25;\
\
for ( var i = myIndexNum ; i <= CinLNum ; i++){\
    try{\
        var layerRefer = thisComp.layer(i+1);\
        var check = layerRefer.name.split(/\\\s+/)[0];\
        if ( check == \'msg\' && layerRefer.active){\
            var temp = layerRefer.height/2;\
            var x = thisLayer.width/2;\
            var  y =  temp+layerRefer.position[1]+thisLayer.height/2+pad ;\
            [x,y]\
        break;\
        }\
    }\
    catch (e){\
        e  \
    }\
    if (xxx() > bottomPosition-pad  ){\
        [thisLayer.width/2,firstposition+bottomPosition -xxx()]\
    }\
    else{\
        [thisLayer.width/2,firstposition+thisLayer.height/2]\
    }\
}\
function xxx(){\
    var temp = 0;\
    for ( var i = myIndexNum ; i >= 1 ; i--){\
    var layerRefer = thisComp.layer(i);\
    var check = layerRefer.name.split(/\\\s+/)[0];\
        if ( check == \'msg\' && layerRefer.active){\
            temp = temp + layerRefer.height+ pad;\
        }\
    }\
    return temp+firstposition/2+pad*2;\
}'
);

expression.rect = String (
'var CinLNum = thisComp.numLayers;\
var result ;\
\
for ( var i = 1 ;  i <= CinLNum ; i++ ){\
    try{\
    var layerRefer = thisComp.layer(i);\
    var check = layerRefer.name.split(/\\\s+/)[0];\
        if ( check == \'target\' ){\
            result = i;\
            break;\
        }\
    }\
    catch ( e ){\
        e\
    } \
}\
result\
\
pad = '+padding.text_Rect_margin+';\
src = thisComp.layer(result)//テキストレイヤーを指定\
box = src.sourceRectAtTime(time - src.inPoint);\
[box.width+pad,box.height+pad]'
);

expression.timeLayer = String (
'src = thisLayer;\
box = src.sourceRectAtTime(src.inPoint)\
x = value[0];\
y=thisComp.height-box.height;\
[x,y]'
);

}//============================== AE expression ==============================


{//============================== AE Actions ==============================
function Ae(){
addFolders();
addComps();
loadImage(icon_Pics);
get_Name();
create_Icon_Comp();
//⑦サウンドファイルをインポートしてオブジェクトにいれる。
 if (sound_Setting_Checkbox.value){
soundInAEObj();
}
loadImageBG(bg_pics);
timeSetting(); //ランダム時間か指定時間で時間を作る
msg();
overRayImport();
title();
AeComp.Final.openInViewer()
}    
}//============================== AE Actions ==============================

{//============================== AE Functions ==============================
//フォルダを作成
function addFolders(){
//①フォルダ作成
AeFolder.main = app.project.items.addFolder(decodeURI($ytLib.getPathName(myCsvFile,1)));
//②音源の設定がオンであればサウンドフォルダを作成
if ( sound_Setting_Checkbox.value ){
    AeObj.soundFolderObj = app.project.items.addFolder(AeName.soundFolder);
    AeObj.soundFolderObj.parentFolder = AeFolder.main;
}

//compフォルダの作成
(function compFolder(){
    AeFolder.comp = app.project.items.addFolder('_Comp');
    AeFolder.comp.parentFolder = AeFolder.main;
})();

//Finalフォルダの作成
(function FinalFolder(){
    AeFolder.Final = app.project.items.addFolder('_Final');
    AeFolder.Final.parentFolder = AeFolder.comp;
})();

//msgフォルダの作成
(function msgFolder(){
    AeFolder.msg = app.project.items.addFolder('_msg');
    AeFolder.msg.parentFolder = AeFolder.comp;
})();

//msgフォルダの作成
(function iconFolder(){
    AeFolder.icon = app.project.items.addFolder('_icon');
    AeFolder.icon.parentFolder = AeFolder.comp;
})();

(function imgFolder (){
AeObj.imageFolderObj= app.project.items.addFolder(AeName.image);
AeObj.imageFolderObj.parentFolder = AeFolder.main;
})();

}    

//コンポジションを作成
function addComps(){
    AeComp.Final = app.project.items.addComp(decodeURI($ytLib.getPathName (myCsvFile,1))+"_final",1080,1920,1.0,600,30);    
    AeComp.Final.parentFolder = AeFolder.Final; 
}

function loadImage(target){//アイコン写真をインポートしてAEオブジェクトをicon_pics_Obj_Pathに配列
    icon_pics_Obj_Path = [];
    for ( var i = 0 ; i < target.length ; i ++ ){
        var imp  = new ImportOptions();
        imp.file = new File(target[i]);
        var myFiles = app.project.importFile(imp);  
        myFiles.parentFolder=AeObj.imageFolderObj;
        icon_pics_Obj_Path.push(myFiles);
    }
}
function get_Name(){//名前を配列
    personName =[] ;
    for ( var i = 7 ; i < csv[2].length-1 ; i++){
        if (csv[2][i] !== ''){
            personName.push(csv[2][i]);
        }
    }
}

function create_Icon_Comp(){
    icon_Comp_Obj = [];
    for ( var i = 0 ; i < personName.length ; i ++){
        icon_Comp_Obj.push ( app.project.items.addComp(personName[i]+'_Icon',100,100,1.0,600,30));       
        icon_Comp_Obj[i].parentFolder= AeFolder.icon;
        var picsLayer = icon_Comp_Obj[i].layers.add(icon_pics_Obj_Path[i]);

        //コンポジションい入ったimgのスケールを設定
        var pics_Scall =picsLayer.property("ADBE Transform Group").property("ADBE Scale");
        pics_Scall.setValue([fixSize(icon_Comp_Obj[i],picsLayer)[0],fixSize(icon_Comp_Obj[i],picsLayer)[1]]);

        shapeEllipse_Setting(icon_Comp_Obj[i],icon_Comp_Obj[i].width);
        picsLayer.trackMatteType = TrackMatteType.ALPHA;
    }
}
function loadImageBG(target){//アイコン写真をインポートしてAEオブジェクトをicon_pics_Obj_Pathに配列
        var imp  = new ImportOptions();
        imp.file = new File(target);
        AeObj.backgroundObj = app.project.importFile(imp);  
        AeObj.backgroundObj.parentFolder=AeObj.imageFolderObj;
        AeComp.Final.layers.add(AeObj.backgroundObj);
}

function overRayImport(){
    var overRayPaty;
    try{
        overRayPaty = new File (thisFolderPath+'/youtool_common/line/overray.png');
        var imp  = new ImportOptions();
        imp.file = new File(overRayPaty);
        AeObj.overRayObj = app.project.importFile(imp);  
        AeObj.overRayObj.parentFolder=AeObj.imageFolderObj;
        AeComp.Final.layers.add(AeObj.overRayObj);
    }
    catch(e){
        alert('オーバーレイ画像が見つかりません。\rオーバーレイ画像を選択するか'+decodeURI(thisFolderPath)+'/youtool_common/line/フォルダにoverray.pngを追加して下さい。')
        overRayPaty = FileOpen ('オーバーレイ画像を選択して下さい');
        var imp  = new ImportOptions();
        imp.file = new File(overRayPaty);
        AeObj.overRayObj = app.project.importFile(imp);  
        AeObj.overRayObj.parentFolder=AeObj.imageFolderObj;
        AeComp.Final.layers.add(AeObj.overRayObj);
    }    
}

function soundImport(target){
        var imp  = new ImportOptions();
        imp.file = new File(target);
        var temp = app.project.importFile(imp);  
        temp.parentFolder=AeObj.soundFolderObj;
        return temp;
}

function soundInAEObj(){
    try{
    soundFile.receive = soundImport(AE_sound_Path[0]);
    soundFile.send = soundImport(AE_sound_Path[1]);
    soundFile.information = soundImport(AE_sound_Path[2]);
    }catch (e){}
}

function finalComp(){
    AeComp.Final = app.project.items.addComp(decodeURI($ytLib.getPathName (myCsvFile,1))+"_final",1080,1920,1.0,600,30);
}

function msg(){

{//関数内変数
var  count = 0 ;
var inTime = 0 ;
var msgComp;
var CompTitle ;
var msgCompInFinalComp;
var AE_Icon_Obj;
var NameLayer;
var NameLayerSize;
var NameLayerSizeH;
var massageLayer;
var msgLayerSize;
var msgLayerSizeH;
var shapeLayer;
var shapeLayerSize;
var arrowLayer;
var arrowLayerSize;
var mySound;
var txtlength = [0];
var msgLayerSizeW;
var msgLayerSizeH;
var arrowLayer;
var kidokuTextLayer;
var timeLayer;
var timeLayerSize;
}

    for ( var i = 0 ; i < csv.length ; i++ ){
        for ( var j = 0 ; j < csv[i].length ; j ++ ){
            if (csv[i][j] !== '' && csv[i][0] !==''){
                if ( i >= 3 && j >= 7){
                    if ( j < csv[i].length-1 ){
//~                         $.writeln('相手ののメッセージ='+csv[i][j]);
                        count = count +1;
                        CompTitle = 'msg / ' +zeropaddingNum(csv,count)+ '_'+csv[i][j];
                        msgComp = app.project.items.addComp(textOvershort(CompTitle,common.shortSpel),1080,100,1.0,600,30);
                        //NameLayerテキストレイヤー
                        NameLayer = msgComp.layers.addText(personName[(j-8)]);
                        textLayerSetting (msgComp,NameLayer,fSize.name,fill.color1,fontF.main);//フォントサイズ+塗+フォントファミリー+アンカーポイント
                        NameLayerSize = $ytLib.get_layer_size(msgComp,NameLayer);
                        NameLayer.property("ADBE Transform Group").property("ADBE Position").setValue([NameLayerSize[0]/2+padding.grp5,NameLayerSize[1]/2]); //名前レイヤーの位置変更
                        NameLayerSizeH = layerheight(msgComp,NameLayer);
                        //msgテキストレイヤー
                        massageLayer = msgComp.layers.addText(textNumSplit(csv[i][j],28)); //一行15文字でテキストレイヤーを追加
                        massageLayer.name = 'target / '+textOvershort(csv[i][j],common.shortSpel01);
                        textLayerSetting (msgComp,massageLayer,fSize.timeline,fill.color2,fontF.main);
                        msgLayerSize = $ytLib.get_layer_size(msgComp,massageLayer);
                        msgLayerSizeH = layerheight(msgComp,massageLayer)
                        massageLayer.property("ADBE Transform Group").property("ADBE Position").setValue([msgLayerSize[0]/2+padding.ShapeL+(padding.text_Rect_margin/2),(msgLayerSize[1]/2)+NameLayerSizeH+padding.Top+(padding.text_Rect_margin/2)]);
                        //コンポジションのサイズを変更
                        msgComp.height = Math.floor(layerheight(msgComp,massageLayer)+padding.text_Rect_margin);
                        //シェイプレイヤー作成
                        shapeLayer = msgComp.layers.addShape(); // adding shape layer    
                        shapeRect_Setting(msgComp,shapeLayer,fill.receive);
                        shapeLayerSize = $ytLib.get_layer_size(msgComp,shapeLayer);
                        shapeLayer.property("ADBE Transform Group").property("ADBE Position").setValue([shapeLayerSize[0]/2+padding.ShapeL,(shapeLayerSize[1]/2)+NameLayerSizeH+padding.Top]);

                        //矢印
                        arrowLayer = msgComp.layers.addShape(); 
                        shapeArrow(msgComp,arrowLayer,1);
                        arrowLayerSize = $ytLib.get_layer_size(msgComp,arrowLayer);
                        arrowLayer.property("ADBE Transform Group").property("ADBE Position").setValue([arrowLayerSize[0]+icon_Comp_Obj[j-8].width+15,(arrowLayerSize[1]/2)+padding.arrow]);//arrowの位置設定

                        //時間のテキストレイヤー
                        timeLayer = msgComp.layers.addText(resultDateArray[i-3]);
                        textLayerSetting (msgComp,timeLayer,fSize.name,fill.color1,fontF.main);//フォントサイズ+塗+フォントファミリー+アンカーポイント
                        timeLayerSize = $ytLib.get_layer_size(msgComp,timeLayer);
                        timeLayer.property("ADBE Transform Group").property("ADBE Position").setValue([msgLayerSize[0]+padding.ShapeL+timeLayerSize[0]+padding.tlm,msgLayerSize[1]]);
                        timeLayer.property("ADBE Transform Group").property("ADBE Position").expression = expression.timeLayer;

                        //最終コンポジションの高さ再設定
                        msgComp.height = Math.floor(NameLayerSizeH+shapeLayerSize[1]+padding.Top )//コンポジションのサイズを変更
                        //音声ファイルの追加
                        if (sound_Setting_Checkbox.value){//着信音を設定するにチェックが入っていたら
                            try{
                                mySound = msgComp.layers.add(soundFile.receive);
                                mySound.moveToEnd();
                            }
                            catch (e){
                            }
                        }
                    }
                    else{
                        count = count +1;
//~                         $.writeln('自分のメッセージ='+csv[i][j])         
                        CompTitle = 'msg / ' +zeropaddingNum(csv,count)+ '_'+csv[i][j];
                        msgComp = app.project.items.addComp(textOvershort(CompTitle,common.shortSpel),1080,100,1.0,600,30);
                        //msgテキストレイヤー=====================================================================================================================================
                        massageLayer = msgComp.layers.addText(textNumSplit(csv[i][j],28)); //一行15文字でテキストレイヤーを追加
                        massageLayer.name = 'target / '+textOvershort(csv[i][j],common.shortSpel);
                        textLayerSetting (msgComp,massageLayer,fSize.timeline,fill.color2,fontF.main);//テキスト属性の変更 テキストレイヤー作成直後とシェイプレイヤーを作成する前に適用
                        msgLayerSize = $ytLib.get_layer_size(msgComp,massageLayer)+[padding.grp1,padding.grp1];
                        msgLayerSizeW = layerWidth(msgComp,massageLayer);
                        msgLayerSizeH = layerheight(msgComp,massageLayer);
                        massageLayer.property("ADBE Transform Group").property("ADBE Position").setValue([msgComp.width-(msgLayerSizeW/2)-padding.ShapeR-(padding.text_Rect_margin/2),(msgLayerSizeH/2)+(padding.text_Rect_margin/2)]);                        
                        //コンポジションのサイズを変更
                        msgComp.height = Math.floor(layerheight(msgComp,massageLayer)+padding.text_Rect_margin);
                        //シェイプレイヤー作成
                        shapeLayer = msgComp.layers.addShape(); // adding shape layer    
                        shapeRect_Setting(msgComp,shapeLayer,fill.myMassage);
                        shapeLayerSize = $ytLib.get_layer_size(msgComp,shapeLayer);
                        shapeLayer.property("ADBE Transform Group").property("ADBE Position").setValue([msgComp.width-(shapeLayerSize[0]/2)-padding.ShapeR,(shapeLayerSize[1]/2)]);
                        //矢印
                        arrowLayer = msgComp.layers.addShape(); 
                        shapeArrow(msgComp,arrowLayer,2);
                        arrowLayerSize = $ytLib.get_layer_size(msgComp,arrowLayer);
                        arrowLayer.property("ADBE Transform Group").property("ADBE Position").setValue([msgComp.width-arrowLayerSize[0]-15,padding.ArrowR]);//arrowの位置設定
                        //既読テキストレイヤー
                        kidokuTextLayer = msgComp.layers.addText('既読');
                        textLayerSetting(msgComp,kidokuTextLayer,fSize.kidoku,fill.color1,fontF.main);
                        var kidokuTextLayerW = layerWidth(msgComp,kidokuTextLayer);
                        var kidokuTextLayerH = layerheight(msgComp,kidokuTextLayer);
                        var resultKidokuPosX = msgComp.width-msgLayerSizeW-padding.ShapeR-(padding.text_Rect_margin/2)-kidokuTextLayerW-10;
                        var resultKidokuPosY = msgComp.height-kidokuTextLayerH/2;
                        kidokuTextLayer.property("ADBE Transform Group").property("ADBE Position").setValue([resultKidokuPosX,resultKidokuPosY]);     
                        kidokuTextLayer.startTime = csv[i][j].length*0.1;

                        //時間のテキストレイヤー
                        timeLayer = msgComp.layers.addText(resultDateArray[i-3]);
                        textLayerSetting (msgComp,timeLayer,fSize.name,fill.color1,fontF.main);//フォントサイズ+塗+フォントファミリー+アンカーポイント
                        var timeLayerW = layerWidth(msgComp,timeLayer);
                        var timeLayerH = layerheight(msgComp,timeLayer);
                        var resulttimeLayerPosX = msgComp.width-msgLayerSizeW-padding.ShapeR-padding.text_Rect_margin-(timeLayerW/2)-10;
                        var resulttimeLayerPosY = msgComp.height-timeLayerH/2;
                        timeLayer.property("ADBE Transform Group").property("ADBE Position").setValue([resulttimeLayerPosX,resulttimeLayerPosY-50]);      


                        if (sound_Setting_Checkbox.value){//着信音を設定するにチェックが入っていたら
                            try{
                                mySound = msgComp.layers.add(soundFile.send);
                                mySound.moveToEnd();
                            }
                            catch (e){
                            }
                        }
                    }
                    //共通の設定
                    msgComp.parentFolder=AeFolder.msg;
                    msgCompInFinalComp = AeComp.Final.layers.add(msgComp);  
                    msgCompInFinalComp.property("ADBE Transform Group").property("ADBE Position").expression = expression.position;
                    if ( j != csv[i].length-1){//アイコンのコンプを入れる
                    AE_Icon_Obj = msgComp.layers.add(icon_Comp_Obj[j-8]);
                    //AE_Icon_Obj.property("ADBE Transform Group").property("ADBE Position").setValue([msgComp.width/2+padding.grp3,msgComp.height/2]);//アイコンの位置設定
                    AE_Icon_Obj.property("ADBE Transform Group").property("ADBE Position").setValue([AE_Icon_Obj.width/2+padding.grp3,AE_Icon_Obj.height/2]);//アイコンの位置設定
                    }
                    //文字数をプッシュ
                    txtlength.push(csv[i][j].length)
//~                     $.writeln (txtlength)
                    //時間の追加
                    inTime = inTime+ Number ( csv[i][2] ) +(txtlength[i-3]*common.textSpeed);
                    msgCompInFinalComp.startTime = inTime;

                }
            }
            else if (csv[i][j] !== '' && j == 7){
                //共通の設定
                count = count +1;
//~                 $.writeln('コメントです='+csv[i][7])
                CompTitle = 'msg / ' +zeropaddingNum(csv,count)+ '_'+csv[i][j];
                msgComp = app.project.items.addComp(textOvershort(CompTitle,common.shortSpel),1080,100,1.0,600,30);
                //msglayer
                massageLayer = msgComp.layers.addText(textNumSplit(csv[i][j],36));
                massageLayer.name = 'target / '+textOvershort(csv[i][j],common.shortSpel);
                textLayerSetting (msgComp,massageLayer,fSize.timeline,fill.color1,fontF.main);//テキスト属性の変更 テキストレイヤー作成直後とシェイプレイヤーを作成する前に適用
                msgLayerSize = $ytLib.get_layer_size(msgComp,massageLayer)+[padding.grp1,padding.grp1];
                msgComp.height = Math.floor(layerheight(msgComp,massageLayer)+padding.text_Rect_margin)//コンポジションのサイズを変更
                massageLayer.property("ADBE Transform Group").property("ADBE Position").setValue([msgComp.width/2,msgComp.height/2]);
                //シェイプレイヤー作成
                shapeLayer = msgComp.layers.addShape(); // adding shape layer    
                shapeRect_Setting(msgComp,shapeLayer,fill.infomation);

                msgComp.parentFolder=AeFolder.msg;
                msgCompInFinalComp = AeComp.Final.layers.add(msgComp);     
                msgCompInFinalComp.property("ADBE Transform Group").property("ADBE Position").expression = expression.position;  
                inTime = inTime+ Number ( csv[i][1] ) +(txtlength[i-3]*common.textSpeed);
                //文字数をプッシュ
                txtlength.push(csv[i][j].length)
//~                 $.writeln (txtlength)
                //時間の追加
                msgCompInFinalComp.startTime = inTime;
//~                 =======================================
                if (sound_Setting_Checkbox.value){//着信音を設定するにチェックが入っていたら
                    try{
                        mySound = msgComp.layers.add(soundFile.information);
                        mySound.moveToEnd();
                    }
                    catch (e){
                    }
                }
//~                 =======================================
            }
        }
    }

}


//コメントの投稿時間を配列に入れる。
function timeSetting(){

    date = new Date(); // CreateTime

    if ( !time_Setting_Checkbox.value ){//random
        date.setHours ( Math.round( Math.random()*23 ))
        date.setMinutes ( Math.round( Math.random()*60 ))
    }
    else{//fix
        date.setHours (time_Setting_Etxt_hours.text)
        date.setMinutes ( Math.round( Math.random()*60 ))
    }


    var resultTimeStompArray = [] ;
    for ( var i = 0 ; i < csv.length ; i++ ){
        for ( var j = 0 ; j < csv[i].length ; j ++ ){
            if ( i >= 3 && j == 6){
                if (csv[i][j] == ""){
                    resultTimeStompArray.push( addminutes() )
                }
                else{
                    resultTimeStompArray.push(Number ( csv[i][j]) )
                }
            }
        }
    }

    resultDateArray = [];
    for ( var i = 0 ; i < resultTimeStompArray.length ; i++ ){
        resultTime_Set(date,resultTimeStompArray[i]);
//~         $.writeln(date);
//~         $.writeln( resultTimeHours(date.getHours()) + ':' + ('0'+date.getMinutes()).slice(-2) )
        resultDateArray.push( resultTimeHours(date.getHours()) + ':' + ('0'+date.getMinutes()).slice(-2) )
//~         $.writeln(resultDateArray[i]);
    }

    //関数
    function addminutes(){
        var min = Number ( csv[2][4] );
        var max =Number (  csv[2][5] );
        var random= Math.floor( Math.random() * (max - min+ 1 ) ) + min ;
        return random;
    }
    //時間の追加
    function resultTime_Set(targetDate,sum){
        date.setHours( targetDate.getHours() );
        date.setMinutes( targetDate.getMinutes()+sum );
        return date;
    }

    //時間の表示を治す
    function resultTimeHours (n){
        var str01 = '';
        if (n >= 12){
            return str = '午後'+n % 12;
        }
        else{
           return str = '午前'+n % 12;
        }
        return str01;
    }

}




function title(){
    var textLayer = AeComp.Final.layers.addText(textOvershort(csv[1][2],20));
    textLayerSetting (AeComp.Final,textLayer,fSize.title,fill.color1,fontF.main)
//~     $.writeln(layerheight(AeComp.Final,textLayer));
    var textWidth = layerWidth(AeComp.Final,textLayer);
    var textheight  = layerheight(AeComp.Final,textLayer);
    textLayer.property("ADBE Transform Group").property("ADBE Position").setValue([textWidth/2+100,textheight/2+47]);


}

}//============================== AE Functions ==============================

{//============================== AE Method ==============================
//文字列を制限して末尾に...を追加する
//例)「私の名前は山田太郎です」という文字列を「私の名前は...」に変換する。
function textOvershort(target,n){
    var resultStr = '';
    var tempArray = [];
    var count = 0 ;
    for (var i = 0 ; i < target.length ; i ++){
        count = count + getLen(target[i]);
        if (count <= n){
            tempArray.push(new Array (target[i]))
        }else{
        tempArray.push('...')
        break ;    
        }
    }
resultStr = resultStr + tempArray.toString().replace(/,/g,'')
return resultStr;
}

//配列ゼロパディング
function zeropaddingNum(targetArray,thisNum){
    var  zerocount = ''
    var temp = String(targetArray.length);
    var toNum = Number (temp.length);
    for (var i = 0 ; i < toNum;  i++ ){
        zerocount  = zerocount+'0';
    }
    return (  String ( zerocount + String ( thisNum ) ). slice(- (toNum+1) )   )
}

function textLayerSetting (targetComp,targetlayer,sizeNum,color,font){
    var temp = targetlayer.property("ADBE Text Properties").property("ADBE Text Document").value;
    temp.fontSize = sizeNum;
    temp.fillColor = color;
    temp.font = font;
    temp.tracking = 0;
    targetlayer.property("ADBE Text Properties").property("ADBE Text Document").setValue(temp);
    anchorCenter(targetComp,targetlayer);//アンカーポイントをセンターへ
}

//アンカーポイントを真ん中に
function anchorCenter(targetComp,Layertext){
    //小数点整理
        function roundFloat(number) {
        var _pow = Math.pow( 10 , 4 );
        return Math.round( number * _pow ) / _pow;
        }
        var curTime = targetComp.time;
        var myAnchor = Layertext.property("ADBE Transform Group").property("ADBE Anchor Point");
        var tl = Layertext.sourceRectAtTime(curTime, false).left; //テキストの左側の座標 l
        var tw =Layertext.sourceRectAtTime(curTime, false).width; //テキストの全体の幅 b
        var tt = Layertext.sourceRectAtTime(curTime, false).top;//テキスト上の座標 c
        var th = Layertext.sourceRectAtTime(curTime, false).height; //テキスト全体の高さ d
        var setX=roundFloat((tw/2)+tl);
        var setY=roundFloat((th/2)+tt);
        var setA = myAnchor.setValue([setX,setY]);  
}

//テキストレイヤーのhaightを取得
function layerheight(targetComp,target){
    var curTime = targetComp.time;
    var temp = target.sourceRectAtTime(curTime, false).height;

    var _pow = Math.pow( 10 , 4 );
    return Math.round( temp * _pow ) / _pow;

}
//テキストレイヤーのwidthを取得
function layerWidth(targetComp,target){
    var curTime = targetComp.time;
    var temp = target.sourceRectAtTime(curTime, false).width;

    var _pow = Math.pow( 10 , 4 );
    return Math.round( temp * _pow ) / _pow;

}

//テキスト折り返し
function textNumSplit(target,n){ 
    var resultStr = '';
    var tempArray;
    var temp = target.split(/\r\n|\n|\r/);
    for ( var i = 0 ; i < temp.length ; i++ ){
        var count = 0 ;
        tempArray = [];
        for ( var j = 0 ; j < temp[i].length ; j++){
            count = count + getLen(temp[i][j]);
            tempArray.push(new Array  ( temp[i][j]) );
            if ( count > n){
            tempArray.push(new Array  ( '\r' ) );
            count = 0 ;
            }
        }
    resultStr = resultStr + tempArray.toString().replace(/,/g,'')+"\r";
    }
    return resultStr;
}

//シェイプレイヤーを作成
function shapeRect_Setting(targetcomp,target,color){
    target.name = "contentsArea"; // name the shape layer
    var shapeGroup1 = target.property("Contents").addProperty("ADBE Vector Group"); // creating a group1
    shapeGroup1.name = "contentsArea"; //name the group1
    var shapeRect = shapeGroup1.property("Contents").addProperty("ADBE Vector Shape - Rect").property("ADBE Vector Rect Size"); // adding rectangle to the group1
    var rectFill = shapeGroup1.property("Contents").addProperty("ADBE Vector Graphic - Fill");
    var fill_Color = rectFill.property("ADBE Vector Fill Color").setValue(color);
    var rectSize = target.property("ADBE Root Vectors Group").property("ADBE Vector Group").property("ADBE Vectors Group").property("ADBE Vector Shape - Rect").property("ADBE Vector Rect Size");
    var roundness = target.property("ADBE Root Vectors Group").property("ADBE Vector Group").property("ADBE Vectors Group").property("ADBE Vector Shape - Rect").property("ADBE Vector Rect Roundness");
    roundness.setValue(padding.roundness);
    rectSize.expression = expression.rect;
    target.moveToEnd();
}

//吹き出しの矢印
function shapeArrow(targetComp,target,direction){//direction 1 = Right  2=Left
    // create a new shape layer with path and stroke

    target.name = "arrow"; // name the shape layer
    myShapeGroup = target.property("ADBE Root Vectors Group");  // select the vector shapes PropertyGroup object
    myShapeGroup.addProperty("ADBE Vector Shape - Group"); // add a path
    var color = myShapeGroup.addProperty("ADBE Vector Graphic - Fill"); // add a fill
    // create a temporary shape object and set the values
    var myShape = new Shape();
        if (direction == 1){
            myShape.vertices = [[-19.5,-16],[19.5,-8],[18.5,16]];
            myShape.inTangents = [[1.10491943359375,26.583984375],[-7.00799560546875,-0.3436279296875],[0,0]];
            myShape.outTangents = [[15.9326171875,12.5942993164063],[0,19.0562133789063],[0,0]];
            color.property("ADBE Vector Fill Color").setValue(fill.color1);
        }
        else{
            myShape.vertices = [[19.5,-16],[-19.5,-8],[-18.5,16]];
            myShape.inTangents = [[-1.10491943359375,26.583984375],[7.00799560546875,-0.3436279296875],[0,0]];
            myShape.outTangents = [[-15.9326171875,12.5942993164063],[0,19.0562133789063],[0,0]];  
            color.property("ADBE Vector Fill Color").setValue(fill.myMassage);
        }
    myShape.closed = true;
    // set the value of the path too the shape object
    myShapeGroup.property(1).property("ADBE Vector Shape").setValue(myShape);
    target.moveToEnd();
}

//時間作成
function myDate(flag,hour){//引数はUIパネルから
    if ( !flag ){//random
        date.setHours ( Math.round( Math.random()*23 ))
        date.setMinutes ( Math.round( Math.random()*60 ))
    }
    else{//fix
        date.setHours (hour)
        date.setMinutes ( Math.round( Math.random()*60 ))
    }
}

function fixSize(targetComp,targetPics){
    var setw =  targetComp.width/targetPics.width*100;
    var seth =  targetComp.height/targetPics.height*100;

    if (targetPics.width > targetPics.height){
        return [seth,seth];
    }
    else if(targetPics.width < targetPics.height){
        return [setw,setw];
    }
    else if (targetPics.width == targetPics.height){
        return [setw,setw];
    }
}



function shapeEllipse_Setting(targetcomp,SizeValue){
     var shapeLayer = targetcomp.layers.addShape(); // adding shape layer    
    shapeLayer.name = "alph"; // name the shape layer
    var shapeGroup1 = shapeLayer.property("Contents").addProperty("ADBE Vector Group"); // creating a group1
    shapeGroup1.name = "contentsArea"; //name the group1
    var shapeRect = shapeGroup1.property("Contents").addProperty("ADBE Vector Shape - Ellipse").property("ADBE Vector Ellipse Size"); // adding rectangle to the group1
    var EllipseFill = shapeGroup1.property("Contents").addProperty("ADBE Vector Graphic - Fill");
    var EllipseSize = shapeLayer.property("ADBE Root Vectors Group").property("ADBE Vector Group").property("ADBE Vectors Group").property("ADBE Vector Shape - Ellipse").property("ADBE Vector Ellipse Size");
    EllipseSize.setValue([SizeValue,SizeValue])
}


}//============================== AE Method ==============================




5
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4