База знаний
- Онлайн руководство
- Блог проекта
- Вопросы и ответы
- Нормативы
- Обучающие примеры
- Инструкции
- Презентации
- Видеоролики с YouTube
- Совместимость
Обучающие примеры
- Продается коттедж
- Отзеркаливание текста в параметрическом объекте (2)
- Растягивание объекта за базовую точку (pntOrigin)
- Автоматическая маркировка колонн через спецификацию
- Отзеркаливание текста в параметрическом объекте
- Получение значения из другой таблицы
- Пример управления отображением шапки таблицы
- Железобетонная колонна как параметрический объект
- Добавление пользовательского объекта в базу элементов СПДС
- Перенумерация блоков AutoCAD в чертеже
- Создание списков параметрического объекта
- Подсчет блоков AutoCAD
- Как быстро посчитать площадь скатной кровли.
- Чертёж лестницы за 3 минуты средствами СПДС
- Пример получения отчетов в СПДС Стройплощадка
Читать новости в почте
Поиск
Растягивание объекта за базовую точку (pntOrigin)
В этой небольшой статье рассмотрим как можно отредактировать стандартный параметрический объект, чтобы за базовую точку объекта можно было не переносить объект, а растягивать. Это удобно будет при работе со швеллерами, трубами и прочими объектами, которые приходится растягивать в обе стороны.
Для примера будет использовать стандартный параметрический объект трубу по
Нас интересует функция 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;
};
И всё, теперь всё работает просто великолепно)
Вот такими несложными манипуляциями мы упростили работу со стандартным параметрическим объектом, добавив возможность растягивать его в обе стороны =)