В продолжение этого урока «Отзеркаливание текста в параметрическом объекте»
Работать будем с получившимся объектом в предыдущем уроке и будем его упрощать и дорабатывать.
На самом деле, действий не так много придётся совершить =) Благодаря случайности обратил внимание, что у всех объектов разница углов между vecDirection и осью oZ, и vecPlane и осью o Z будет всегда равна 90 градусов. Только у неотзеркаленых она положительная,А у отзеркаленых — отрицательн
Давайте проверим это и добавим два параметра в наш объект:
rAngleZ1, "Угол Z (Direction)",
rAngleZ2, "Угол Z (Plane)",
Так же добавим их в функцию MirrorObject:
rAngleZ1 = angleTwoPi(vecDirection,oZ);
rAngleZ2 = angleTwoPi(vecPlane,oZ);
и закомментируем наши rAngleX и rAngleY в функции MirrorObject, чтобы не производилось отзеркаливание объекта.
Достаём объект из базы, поворачиваем его всячески и зеркалим, убеждаясь в словах выше:
Видим, что по-мимо углов в 90 и -90 градусов присутствует углы в -270 и 270 градусов соответственно, причина этому то, что когда величина угла достигает 360 градусов она сбрасывается на 0. и получается, что 10-280=-270,но при этом 370-280=90.
Не забываем отразить это в нашем коде.
Для удобства в функции MirrorObject добавим переменную a равную a=rAngleZ1-rAngleZ2
Пишем в функции MirrorObject:
rAngleZ1 = angleTwoPi(vecDirection,oZ);
rAngleZ2 = angleTwoPi(vecPlane,oZ);
a=rAngleZ1-rAngleZ2;
if(a==-90 || a==270)
{
vecDirection=-vecDirection;
}
Теперь наш объект зеркалится обратно, но остаётся проблема с поворотом текста
Для поворота текста будем работать с переменной rAngleY, «Угол Y», поэтому надо её расскомментировать.
Теперь обновляем наши объекты и определяем уже не точные значения, а промежуток, в котором нам надо развернуть текст на 180 градусов.
У меня он получился от 90<rAngleY<=270
Исходя из этого, обновляем нашу функцию следующим образом, тем самым приводя её к итоговому виду
rAngleY = angleTwoPi(oY,vecPlane);
rAngleZ1 = angleTwoPi(vecDirection,oZ);
rAngleZ2 = angleTwoPi(vecPlane,oZ);
a=rAngleZ1-rAngleZ2;
sTextAngle=0;
if(a==-90 || a==270)
{
vecDirection=-vecDirection;
}
if(rAngleY>90 && rAngleY<=270)
{
sTextAngle=180;
}
Обновляем наши объекты и наслаждаемся результатом =)
Как результат наших доработок можно отметить не только более изящный код, но и отсутствие привязок к определенному углу поворота объекта — теперь даже при повороте на условные 37.93 градуса и отзеркаливание, наш объект всё равно корректно отобразит имеющийся текст.
В этой небольшой статье рассмотрим как можно отредактировать стандартный параметрический объект, чтобы за базовую точку объекта можно было не переносить объект, а растягивать. Это удобно будет при работе со швеллерами, трубами и прочими объектами, которые приходится растягивать в обе стороны.
Для примера будет использовать стандартный параметрический объект трубу по ГОСТ 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;
};
И всё, теперь всё работает просто великолепно)
Вот такими несложными манипуляциями мы упростили работу со стандартным параметрическим объектом, добавив возможность растягивать его в обе стороны =)
Команды:
Разбить все объекты (EXPLODEALL) и
Разбить примитивы (SPEXPLODEPSEUDO, EXPLODEPSEUDO)
предназначены для передачи чертежей смежным специалистам или в стороннюю организацию, испытывающие сложности с работой с proxy-объектами и невозможностью установить бесплатный Менеджер объектов.
Одно из основных возможностей версии СПДС GraphiCS 2021 является управление объектами чертежа из табличного редактора. Продемонстрируем на примере автоматического маркирования колонн.
На плане размещены колонны с помощью инструмента СПДС GraphiCS. По умолчанию колоннам не проставляется позиция и метка (марка колонны). Когда на плане размещено много колонн, то вносить эти позиции вручную трудоемко.
Object Enabler — библиотека объектов СПДС для отображения их в платформе AutoCAD и частичного редактирования без лицензии на СПДС GraphiCS.
Никаких дополнительных меню в AutoCAD после установки менеджера объектов не появляется.
При открытии чертежа объекты СПДС частично управляются через панель Свойств.
Допустим нужно управлять отображением шапки таблицы. Для этого не надо создавать две разные таблицы. Нужно настроить управление через форму высотой строки шапки.
Компании CSoft Development и «Магма-Компьютер» сообщают о выходе новых версий специализированных программных продуктов, предназначенных для автоматизации проектирования металлических и железобетонных конструкций, а также для оформления проектно-конструкторской документации таких разделов, как КМ, КЖ, АС.
СПДС Металлоконструкции 2020 и СПДС Железобетон 2020 представляют собой не просто улучшенные варианты предыдущих версий — это совершенно новые программные разработки, предлагающие принципиально новые возможности. Основным новшеством стало объединение инструментов создания металлоконструкций и железобетона в общий функционал. Теперь пользователь может в одном файле проекта формировать чертежи металлоконструкций и железобетона, а также автоматически генерировать необходимые спецификации для любого проектного раздела.
Компания CSoft Development сообщает о выпуске версии СПДС Стройплощадка 2020 для AutoCAD 2020. Программа предназначена для автоматизации проектирования разделов ПОС (Проект организации строительства), ППР (Проект производства работ) и ГНБ (Горизонтально направленное бурение).
Обеспечена автоматическая установка СПДС Стройплощадка 2020 на графические платформы AutoCAD 2020 и Autodesk Architecture 2020.
Целью этой статьи не является дискредитация программного обеспечения. Статья носит исключительно информационный характер и предназначена для защиты конечного пользователя, который может при определенных обстоятельствах потерять свои данные, работая в AutoCAD.
SPDS Extension или модуль СПДС — дополнение к продуктам семейства AutoCAD, разрабатываемое компанией Autodesk.
СПДС GraphiCS — кроссплатформенное приложение, предназначенное для разработки проектно-технической документации, разрабатываемое компанией CSoft Development.
nanoCAD СПДС — тот же самый СПДС GraphiCS, но на платформе nanoCAD Plus от компании Нанософт.
Разгребая утреннюю почту, наткнулся на обращение пользователя в техническую поддержку. Тема письма в принципе объясняла суть проблемы: «Объекты nanoCAD СПДС не отображаются в AutoCAD». К письму, как и полагается, были приложены файлы, скриншоты и подробное описание действий пользователя. Если говорить кратко, то суть обращения сводилась к следующему: пользователь создал проект в nanoCAD СПДС и передал его подрядчикам. Подрядчики, открывая этот файл в AutoCAD, не видят объектов СПДС.
Опытные пользователи сразу скажут, что скорее всего подрядчики просто не включили отображение прокси-объектов, поэтому и не видят данные, которые были созданы в специализированном приложении. Но, как оказалось, всё не так просто…