Растягивание объекта за базовую точку (pntOrigin)
В этой небольшой статье рассмотрим как можно отредактировать стандартный параметрический объект, чтобы за базовую точку объекта можно было не переносить объект, а растягивать. Это удобно будет при работе со швеллерами, трубами и прочими объектами, которые приходится растягивать в обе стороны.
Для примера будет использовать стандартный параметрический объект трубу по ГОСТ 167-69 (Несущие конструкции -> КМ -> Трубы)
Нас интересует функция OnMoveGripPoint
По умолчанию она выглядит так:
function OnMoveGripPoint{
if(NMovingGrip == 1){
L = vecLen(pntGrip0 - pntGrip1);
vecDirection = pntGrip1 - pntGrip0;
LoadInCache( B, s );
SelectInCache( "kFirst", "B", "~", B, "s", "~", s);
} else {
pntOrigin = pntGrip0;
};
};
Давайте для удобства приведём к более понятному виду и уйдём от конструкции else
function OnMoveGripPoint
{
if(NMovingGrip == 0)
{
pntOrigin = pntGrip0;
};
if(NMovingGrip == 1)
{
L = vecLen(pntGrip0 - pntGrip1);
vecDirection = pntGrip1 - pntGrip0;
LoadInCache( B, s );
SelectInCache( "kFirst", "B", "~", B, "s", "~", s);
};
};
Предыдущая запись скрипта имеет права быть, т.к. в объекте всего 2 ручки, но будет неудобна при условии добавления новых ручек, да и в принципе наша запись сразу позволяет понять, к какой ручке мы обращаемся.
Итак, чтобы заставить объект удлиняться за базовую точку, надо прописать изменение длины объекта при перемещение базовой точки.
Получаем:
if(NMovingGrip == 0)
{
pntOrigin = pntGrip0;
L = vecLen(pntGrip1 - pntGrip0);
};
Ура, наш объект растягивается!)
Осталось дописать поведение вектора направления объекта:
if(NMovingGrip == 0)
{
pntOrigin = pntGrip0;
L = vecLen(pntGrip1 - pntGrip0);
vecDirection = pntGrip1 - pntGrip0;
};
И всё, теперь всё работает просто великолепно)
Вот такими несложными манипуляциями мы упростили работу со стандартным параметрическим объектом, добавив возможность растягивать его в обе стороны =)
Edited by dromandon
0 Comments
Recommended Comments
There are no comments to display.