суббота, 10 сентября 2011 г.

Считает расстояние между всеми соседними точками объекта + определяет чётные-нечётные точки объекта


//Взять любой объект, задивайдить (C) и выделить
//Считает расстояние между всеми соседними точками объекта
//Определяет чётные-нечётные точки объекта
var vDoc;//Активный документ
var vOp;//Активный операнд
var ponts;//количество точек в выделенном объекте(проверка дивайда), если "Member not found", то (С)
var P1,P2,P3,P4,P5;
var arr;//Массив для точек объекта
var tuda;//Пересчёт для обратного счёта
var gpcount;//Количество точек в объекте
var i;//индекс лупа
//*******************
distance(P1,P2)//Функция определения дистанции между двумя соседними точками // Calculates the length of the vector that goes from p1 to p2.
{
  return vlen(P2-P1);
}
//*******************
UstPol(vDoc)//Функция определения расстояния между соседними точками объекта+чёт-нечёт
{
vOp = vDoc->GetActiveObject(); //Gets the selected object
if(!vOp)return; //Ends the script if nothing is selected
arr = vOp->GetPoints(); if (!arr) return FALSE; // Массив с точками объекта
gpcount=vOp->GetPointCount();//Количество точек
for(i=0; i<gpcount-2; i++)
{
tuda=(gpcount-i);//Обратный счёт
//Посчитаем расстояние между точками:
  P1 = arr[tuda-2]; // Счёт в обратную сторону, от общего количества точек к точке №2
  P2 = arr[tuda-1]; // Счёт в обратную сторону
println("distance P",tuda-1," -","P",tuda," = ",distance(P1,P2)); // Вызов функции distance - Calculates the length of the vector that goes from p1 to p2.
//Чётное-нечётное
P3=2;
P5=abs(tuda-1);
P4= Modulo(P5, P3);//Модуль числа P5 по 2 (двойке)
if (P4==0) println(tuda-1," =chetnoe");//Если модуль = 0, то чётное, если =1 - нечётное
}
}
//*************************
main(doc,op)
{
vDoc = GetActiveDocument();
vOp=vDoc->GetActiveObject(); if (!vOp) println("Select object"); //Получить выделенный объект, если не выделен - то текст
if (!vOp) return FALSE;//если не выделен, прервать выполнение скрипта
ponts=vOp->GetPointCount(); if (!ponts) println("Devide object!");//Получить количество точек в выделенном объекте, если нет, то объект задивайдить! (C)
if (!ponts) return FALSE;//Прервать, если объект не дивайденный (C)
UstPol(vDoc);
}

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

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