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

Создание из объекта клонов в виде сферы


//*******************************
//Делает клоны в виде шара
//Выбрать объект и выделить его
var vDoc;
var ClonOb;
var NewNull;
var NewClonOb;
var i,j;//Индексы цикла
//********************
      var x,y,z;
      var f;//Увеличитель
      var Nu;// (итерации) по u
      var Nv;// (итерации) по v
      var du;        
      var dv;        
      var u,v;
      var zz;  
      var R;
 //**********************
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 );//Ввести в Объект Менеджер

//**************
      var uMin = 0.0;
      var uMax = 6.283185307;
      var vMin = 0.0;
      var vMax = 6.283185307;
      f = 30;//Увеличитель
      Nu = 20;//Количество клонов по u
      Nv = 20;//Количество клонов по v
      R = 10.0;//Радиус (Увеличитель)
du=(uMax-uMin)/Nu;//ширина
dv=(vMax-vMin)/Nv;//длина
           zz=0;
              for (i=0;i<Nu;i++)//Колонны по u
             {
             for (j=0;j<Nv;j++)//Ряды по v
             {
                    u=uMin+i*du;//Ширина шага
                    v=vMin+j*dv;//Длина шага
x = R * sin(u) * cos(v); //Формула по x
y = R * cos(u);            //Формула по y
z = R * sin(u) * sin(v);  //Формула по z
                  zz=zz+1;
//*************************
NewClonOb = ClonOb->GetClone(0);// Сделать клон выделенного объекта
var sc = NewClonOb->GetContainer();//Получить контейнер для клонов
NewClonOb->SetContainer(sc);//Установить контейнер для клонов
NewClonOb->SetName("Object." + tostring(i));//Дать порядковое имя клонам
NewClonOb->SetPosition(vector(x*f,y*f,z*f));//Установить клон в новую позицию x, y, z
vDoc->InsertObject(NewClonOb,NewNull,NULL);//Добавить детку клона  к родителю NULL
            }
                 GeEventAdd(DOCUMENT_CHANGED);//Зафиксировать изменения в документе
            }
                 GeEventAdd(DOCUMENT_CHANGED);//Зафиксировать изменения в документе
}//конец FormClone(vDoc)
//*********************
main(doc,op)//Главная функция, начало работы скрипта
{
vDoc = GetActiveDocument();//Получить активный документ
FormClone(vDoc);//Нарисовать
}
//**************************

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

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