Если база данных СПДС GraphiCS не восстановилась на PGSQL автоматически, то ниже приведена инструкция восстановления в ручном режиме.
Пользователи часто спрашивают, что это за ошибка возникает при получении онлайн лицензии и как с ней справиться.
Инициализация...
Соединение со Службой Лицензирования...
Лицензия не выдана. Ответ сервера приведен ниже.
CDKey=######
Лицензия не выдана
Причина: Триальная лицензия на эти ID1/ID2 уже выдана
Данное сообщение появляется, в случае повторного запроса лицензии на компьютер, на который ранее лицензия уже была выдана.
Если вы переустанавливали по какой-то причине ПО, то файл лицензии не перезапрашивается — он сохраняется в папке c:\ProgramData\CSoft\RegWizard\Licenses\ В мастере регистрации нужно выбрать пункт — Активизировать лицензию.
Если срок действия лицензии уже закончился, то получить продление лицензии можно только через авторизованного партнера CSoft Development.
Если ваша локальная лицензия была привязана к USB-ключу аппаратной защиты, который поставлялся вместе с программным обеспечением, то нужно скопировать лицензию из папки c:\ProgramData\CSoft\RegWizard\Licenses\ на новый компьютер. После установки ПО на новом компьютере указать эту лицензию (запрашивать новую не нужно).
В случае, если локальная лицензия была привязана к аппаратной части компьютера, то для переноса лицензии нужно обратиться к поставщику ваших лицензий для их переноса.
Начиная с 2021 версий, СПДС и приложения устанавливаются вместе с СУБД PostgreSQL (ранее был MSSQL).
Пользователи могут выбрать в настройках базу данных, расположенных в локальном файле mdf формата.
Для СПДС Металлоконструкций 2021 его можно скачать по ссылке.
В продолжение этого урока «Отзеркаливание текста в параметрическом объекте»
Работать будем с получившимся объектом в предыдущем уроке и будем его упрощать и дорабатывать.
На самом деле, действий не так много придётся совершить =) Благодаря случайности обратил внимание, что у всех объектов разница углов между 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. По умолчанию колоннам не проставляется позиция и метка (марка колонны). Когда на плане размещено много колонн, то вносить эти позиции вручную трудоемко.