Некорректно работает ручка вращения объекта

andrey__chirkin
отредактировано 21 Aug Раздел: Модуль «СПДС»

Добрый день!

При использовании ручки для изменения угла поворота, объект успешно поворачивается на любой угол, кроме 180 градусов. В этот момент, в свойствах объекта вид меняется с вида "Спереди" на вид "Сзади". Если вручную установить вид "Спереди" в свойствах объекта, то объект успешно поворачивается на 180 градусов. Исходники прилагаю.

Ответы

  • Подозреваю, что проекция стандартного объекта, повернутая на 180 градусов это и есть "другой вид"

    Я об этом много раз говорил, что есть своя логика параметрических объектов.

  • andrey__chirkin
    отредактировано 21 Aug

    Это можно как-то исправить? Чтобы при 180 градусах оставался вид спереди.

  • Боюсь, что нет.

  • у вас один вид и одно исполнение

  • я никогда не смогу разобраться:

    		angle = 360 - round(angleTwoPi(pntGrip2 - pntOrigin, -vecOY)); //измерение угла между векторами
    ShowValue("Angle", angle);

    if(0 <= angle && angle < 22.5) {
    angle = 0;
    }
    if(22.5 < angle && angle < 67.5) {
    angle = 45;
    }
    if(67.5 < angle && angle < 112.5) {
    angle = 90;
    }
    if(112.5 < angle && angle < 157.5) {
    angle = 135;
    }
    if(157.5 < angle && angle < 202.5) {
    angle = 180;
    }
    if(202.5 < angle && angle < 247.5) {
    angle = 225;
    }
    if(247.5 < angle && angle < 292.5) {
    angle = 270;
    }
    if(292.5 < angle && angle < 337.5) {
    angle = 315;
    }
    if(337.5 < angle && angle <= 360) {
    angle = 360;
    }

    но похоже тут что-то

  • Если просто вращать?

    	if(NMovingGrip == 2){
    		vecDirection = pntGrip2 - pntGrip0;	
    	}
    

    нормально?

  • Да нормально.

  • Скорее всего ошибка здесь. Я считаю угол от отрицательной оси OY.

    angle = 360 - round(angleTwoPi(pntGrip2 - pntOrigin, -vecOY));
    

  • MCAD
    отредактировано 22 Aug

    https://forum.nanocad.ru/discussion/comment/1522#Comment_1522Я не смогу разобраться. Перенёс точку поворота:

    pntGrip2 = pntOrigin + vecDirection*(rL2+rL4+rL5) - vecPlane*(0);
    

    А зачем так 👆️сложно?

    	if (NMovingGrip == 2) {
    angle = angleTwoPi(Vector(1, 0, 0), pntGrip2 - pntGrip0);
    angle = floor(angle / angleStep + 0.5) * angleStep;// angleStep, Public - изменяется из свойств
    vecDirection = Vector(cos(angle), sin(angle), 0);
    }

    https://cloud.mail.ru/public/7QYG/oLhCiDWif

    Что пользователь не умеет поворачивать командой, или какая-то хитрость есть?

    https://rutube.ru/video/7c8b79694334516f87f56f12d9f2f67f/?playlist=441203&playlistPage=1

  • MCAD
    отредактировано 22 Aug

    Доложу, на всякий случай. Вы знаете, что можно распознавать графику и создавать несколько Исполнений и Видов без образмеривания сложной геометрии?

    00:05 Создаём новую деталь в БД стандартных деталей

    00:33 Добавляем «исполнение»

    00:34 В контекстном меню выбираем «Непараметрическое распознавание»00:40 Указываем нужные примитивы на чертеже. Точка вставки «Исполнения» уже есть на чертеже. Это обычная точка “Point” платформы

    00:44 Добавляем новый вид для данного исполнения и в правой части указываем какому «виду» оно соответствует

    01:21 Добавляем новое исполнение

    01:25 Редактируем название исполнений, которые будут отображаться в свойствах платформы и в при выборе в диалоге

    01:43 Последовательно выбираем графику для конкретных чертежных видов и назначаем соответствие с видами MechWizard (TVIDS)02:30 Сохраняем объект в БД0

    2:33 Запускаем «Мастер скриптов»02:37 Редактируем название объекта. И последовательно нажимаем кнопку «Вперед»

    02:42 Указываем «Отображать объект во время вставки» и сохраняем скрипт02:52 Проверяем работу детали

    03:13 Проверяем редактирование видов через панель «свойства» платформы03:19 Открываем мастер объектов

    03:22 Создаем «Пользовательскую форму», нажав «Добавить форму»

    03:24 Открываем форму и размещаем на ней необходимые «Элементы управления». Это «Просмотр» и «Виды и исполнения»

    03:49 Находим в скрипте функцию OnDialog, удаляем или комментируем UniDialog и вместо него пишем
    ShowForm ("Form1"); // Где Form1 – это имя формы созданное по умолчанию. Его всегда можно переименовать.

  • В вашем случае, есть грип'c на изменения размеров самого обозначения, но можно создать несколько типоразмеров и так же менять исполнения (размер).

    Что касается поворота - все останется таким же.

  • Почему в Vector передается cos и sin?

  • Не помню, но кажется не передается а вычисляется направление.

  • Нашел Ваш объект:

    vecDirection = Vector(cos(angle), sin(angle), 0);
    

    Направление по трем точкам

  • Я только не понял, у вас сам объект есть или нет https://cloud.mail.ru/public/E3S3/ovsc51Ga7