пятница, 23 сентября 2011 г.

Создание клонов из объекта


//*****************************************
//Делает клоны в виде аттрактора
//Выбрать объект и выделить его
var vDoc;
var ClonOb;
var NewNull;
var NewClonOb;
var i,j;//Индексы цикла
//********************
         var x,y,z;
         var a=0.85;////Переменные аттрактора
         var b=0.90;////Переменные аттрактора
         var c=0.40;////Переменные аттрактора
         var d=9.00;////Переменные аттрактора
         var t,s,co;//Переменные формулы аттрактора
         var N=100;//Количество клонов
         var x0=0.0;//Старт x
         var y0=0.2;//Старт y (на радиус сферы=0.2)
         var xa;// x-АЛЬФА
         var ya;// y-АЛЬФА
         var Faktor=300;//Увеличитель
 //**********************
FormClone(vDoc)//Функция отрисовки
{
//***************
     ClonOb=vDoc->GetActiveObject(); if (!ClonOb) println("Select object"); //Получить выделенный объект, если не выделен, прервать выполнение скрипта
     if (!ClonOb) return FALSE;//если не выделен, прервать выполнение скрипта
     NewNull = new(NullObject); // Создать новый Null объект
     NewNull->SetName("Clones");// Имя клонов
     vDoc->InsertObject( NewNull, NULL, NULL );//Ввести в Объект Менеджер

//**************
xa=x0;//Это x-АЛЬФА-начальная - var x0=0.0;-Старт x
y=y0;// var y0=0.2;-Старт y (на радиус сферы=0.2)
ya=y0;
         for (j=0;j<N-1;j++)// от 0 до 999 (var N=1000;)
             {
                 t=c-d/(1+xa*xa+y*y);//Переменная t для аттрактора
                 s=sin(t);//Переменная s для аттрактора
                 co=cos(t);//Переменная co для аттрактора
            x=a+b*(xa*co-y*s);//Формула по x
            y=b*(xa*s+y*co);//Формула по y
            z = ya;//Формула по z
//*************************
NewClonOb = ClonOb->GetClone(0);// Сделать клон выделенного объекта
var sc = NewClonOb->GetContainer();//Получить контейнер для клонов
NewClonOb->SetContainer(sc);//Установить контейнер для клонов
NewClonOb->SetName("Object." + tostring(i));//Дать порядковое имя клонам
NewClonOb->SetPosition(vector(x*Faktor,y*Faktor,z*Faktor));//Установить клон в новую позицию x, y, z
vDoc->InsertObject(NewClonOb,NewNull,NULL);//Добавить детку клона  к родителю NULL
                 GeEventAdd(DOCUMENT_CHANGED);//Зафиксировать изменения в документе
                 xa=x;// x-АЛЬФА теперь с новой позиции
                 ya=y;// y-АЛЬФА теперь с новой позиции
             }
}//конец FormClone(vDoc)
//*********************
main(doc,op)//Главная функция, начало работы скрипта
{
vDoc = GetActiveDocument();//Получить активный документ
FormClone(vDoc);//Нарисовать
}
//**************************************

Комментариев нет:

Отправить комментарий