Форум профессиональных мебельщиков PROMEBELclub
 
PROMEBELclub - Форум для мебельщиков: конструкторов, дизайнеров, мастеров, технологов и всех, кто имеет отношение к производству и изготовлению мебели. Программы для конструирования и дизайна мебели. Мебельная литература и обучающие пособия.
 
 

Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Меню

Маркет


беспроводные выключатели для мебели
Ответ
 
Опции темы Опции просмотра
Старый 06.06.2017, 08:56  
БАЗИС 10 - Скрипты
systland
VIP
Регистрация: 30.10.2007
Адрес: Москва
Сообщений: 565

Сказал(а) спасибо: 303
Поблагодарили 451 раз(а) в 189 сообщениях
Версия для печати Отправить по электронной почте
systland systland вне форума 06.06.2017, 08:56
Рейтинг: ()

Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 10 в этой теме.
__________________


Последний раз редактировалось systland; 26.12.2017 в 11:52..
Просмотров: 425418
Ответить с цитированием Вверх
Старый 11.07.2018, 18:04   #191
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 196
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

я делаю импорт из базиса в 3CAD
углы поворотов я вычислил , но не пойму как сдвигать в зависимости от начальной точки построения

тут где то было импорт в three.js там возможно такая же проблема


поигрался со свойствами GMin и GMax
как я понял за основу берётся фронтальная панель и через матрицу трансформации разворачивает её до вертикальной , горизонтальной
значения из GMin и GMax показывают координаты изначальной фронтальной панели

Последний раз редактировалось wizardpnz; 11.07.2018 в 23:36.
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 12.07.2018, 11:28   #192
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
поигрался со свойствами GMin и GMax
как я понял за основу берётся фронтальная панель и через матрицу трансформации разворачивает её до вертикальной , горизонтальной
значения из GMin и GMax показывают координаты изначальной фронтальной панели
Значения GMin и GMax показывают минимальную и максимальную точки габаритного параллелепипеда панели в её ЛСК. Как ни крутить панель, её габариты в ЛСК меняться не будут. Однако изменение контура панели может повлиять на эти значения.

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
я делаю импорт из базиса в 3CAD
углы поворотов я вычислил , но не пойму как сдвигать в зависимости от начальной точки построения
А точно надо сдвигать (я думаю, и так всё должно быть)? Можете сказать, что не так отрабатывает при импорте? И еще, может поможет - при вложенности поворот учитывается относительно блока, в который вложен объект. То есть, при иерархии "Панель в блоке Б2, который в блоке Б1" конечный поворот панели будет состоять из поворота Б1, поворота Б2 и, собственно, поворота Панели.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Ovsyanicov (12.07.2018)
Старый 12.07.2018, 11:48   #193
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 196
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

попалась модель широкий шкаф, в нём два цоколя (никаких блоков нет)

1 цоколь 16, 0, 92
2 цоколь 16, 0, 504
это как должно быть

в свойствах детали в базисе

1 цоколь 16, 2250, 108
2 цоколь -0.5, 0, 504

если построить всё скриптами то конечно будет всё нормально, но
руками получается всякие варианты начальных точек

потом матрица трансформации разворачивает углы и всё встает на место

там есть все углы в объекте obj.GlobalMatrix()

пытаюсь разгадать алгоритм как привести этк кашу , чтобы координаты начинались от левого нижнего заднего угла габаритного кубика

придётся написать много этажный if else if .... else ((( наверное нет встроенного инструмента для нормализации координат объекта
wizardpnz вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Ovsyanicov (12.07.2018)
Старый 12.07.2018, 12:30   #194
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
попалась модель широкий шкаф, в нём два цоколя (никаких блоков нет)

1 цоколь 16, 0, 92
2 цоколь 16, 0, 504
это как должно быть

в свойствах детали в базисе

1 цоколь 16, 2250, 108
2 цоколь -0.5, 0, 504

если построить всё скриптами то конечно будет всё нормально, но
руками получается всякие варианты начальных точек

потом матрица трансформации разворачивает углы и всё встает на место

там есть все углы в объекте obj.GlobalMatrix()

пытаюсь разгадать алгоритм как привести этк кашу , чтобы координаты начинались от левого нижнего заднего угла габаритного кубика

придётся написать много этажный if else if .... else ((( наверное нет встроенного инструмента для нормализации координат объекта
ТО есть, вам нужно, чтобы позицией каждого объекта была точка с наименьшими координатами x, y и z?
Letos вне форума   Ответить с цитированием Вверх
Старый 12.07.2018, 12:56   #195
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 196
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

да,чтобы координаты считались как если бы мы их мерили руками на экране о начала координат и без разворотов

я понимаю что базис где то сам применяет свою матрицу но в других прогах такого нет

там просто координаты начала объекта XYZ и ШВГ
и строим в направлении X+ Y+ Z+

тут надо копать
http://grazit.ru/geometricheskie-pre...j-grafike.html

Последний раз редактировалось wizardpnz; 12.07.2018 в 16:50.
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 12.07.2018, 17:19   #196
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
да,чтобы координаты считались как если бы мы их мерили руками на экране о начала координат и без разворотов

я понимаю что базис где то сам применяет свою матрицу но в других прогах такого нет

там просто координаты начала объекта XYZ и ШВГ
и строим в направлении X+ Y+ Z+

тут надо копать
http://grazit.ru/geometricheskie-pre...j-grafike.html
Сделал скрипт для настройки положения панели в точку по минимальным координатам. Использовать его просто: запускаете, указываете панель, и радуетесь (?) результату. Тестировал я его долго (после каждого исправления скрипта, приходилось проверять все варианты поворотов снова), заманался, поэтому довел до состояния "кажется, должно работать" и отдаю его вам. Если обнаружите ошибку, пришлите пример с панелью, которая неправильно преобразовывается, и я поправлю код.
Пока не забыл: В некоторых случаях для приведения позиции объекта к минимальным координатам используется сдвиг контура панели, что может плохо отразиться на элементах панели (например, на пазах).

Код скрипта

Код:
function NegateVector(v) {
    return {
        x: -v.x,
        y: -v.y,
        z: -v.z
    }
}

/**
 * 
 * @param {Object3} obj 
 */
function CorrectObject(obj) {
    StartEditing(obj);

    var minG = obj.ToObject(obj.GabMin);
    var curPos = obj.ToObject(obj.Owner.ToGlobal(obj.Position));
    var rot = obj.RotMatrix;
    var negate = {
        x: false,
        y: false,
        z: false
    }
    var x = {
        x: rot[0],
        y: rot[1],
        z: rot[2],
    }
    var y = {
        x: rot[4],
        y: rot[5],
        z: rot[6],
    }
    var z = {
        x: rot[8],
        y: rot[9],
        z: rot[10],
    }
    const eps = 0.001;
    if (minG.x > curPos.x + eps) {
        negate.x = true;
    }
    if (minG.y > curPos.y + eps) {
        negate.y = true;
    }
    if (minG.z > curPos.z + eps) {
        negate.z = true;
    }
    if (negate.x) {
        if (negate.y) {
            if (negate.z) {
                z = NegateVector(z);
                y = NegateVector(y);
                var shift = obj.NToGlobal({
                    x: obj.GSize.x,
                    y: obj.GSize.y,
                    z: obj.GSize.z
                });
                obj.Contour.Move(-obj.GSize.x, 0);
                obj.TranslateGCS(shift);
            } else {
                y = NegateVector(y);
                var shift = obj.NToGlobal({
                    x: obj.GSize.x,
                    y: obj.GSize.y,
                    z: 0
                });
                obj.TranslateGCS(shift);
            }
        } else if (negate.z) {
            z = NegateVector(z);
            var shift = obj.NToGlobal({
                x: obj.GSize.x,
                y: 0,
                z: obj.GSize.z
            });
            obj.TranslateGCS(shift);
        } else {
            obj.Contour.Move(-obj.GSize.x, 0);            
            var shift = obj.NToGlobal({
                x: obj.GSize.x,
                y: 0,
                z: 0
            });
            obj.TranslateGCS(shift);
        }
    }
    else if (negate.y) {
        if (negate.z) {
            z = NegateVector(z);
            y = NegateVector(y);
            var shift = obj.NToGlobal({
                x: 0,
                y: -obj.GSize.y,
                z: obj.GSize.z
            });
            obj.TranslateGCS(shift);
        }
        else {
            obj.Contour.Move(0, -obj.GSize.y);
            var shift = obj.NToGlobal({
                x: 0,
                y:  obj.GSize.y,
                z: 0
            });
            obj.TranslateGCS(shift);
        }
    } else if (negate.z) {
        z = NegateVector(z);
        var shift = obj.NToGlobal({
            x: 0,
            y: 0,
            z: obj.GSize.z
        });
        obj.Contour.Move(-obj.GSize.x, 0);
        obj.TranslateGCS(shift);
    }

    // Теперь ориентируем объект по осям Y и Z
    obj.Orient(z, y);
}

var obj = GetPanel('panel 1');
if (obj) {
    CorrectObject(obj);
}
[свернуть]


З.Ы. И, как всегда с опозданием, приходит еще одна умная мысль, которая может загубить на корню весь труд выше:
wizardpnz, а не проще ли взять минимальную точку объекта за позицию и вычислить размер панели, например так:
Код:
var pos = obj.GabMin;
var size = {
    x: obj.GabMax.x - obj.GabMin.x,
    y: obj.GabMax.y - obj.GabMin.y,
    z: obj.GabMax.z - obj.GabMin.z,
}
//или
size = obj.NToGlobal(obj.GSize);
З.З.Ы. Обдумал: этот вариант подходит только для ортогональных панелей.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Ovsyanicov (12.07.2018)
Старый 12.07.2018, 18:07   #197
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 196
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

не получается, у нас тут такие базисо строители что я когда смотрю координаты панелей то плакать хочется

не для всех случаев работает
Вложения
Тип файла: zip Модель1.zip (26.2 Кб, 12 просмотров)
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 13.07.2018, 10:25   #198
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
не получается, у нас тут такие базисо строители что я когда смотрю координаты панелей то плакать хочется

не для всех случаев работает
Хороший пример. Пришлось добавить нормализацию контура. Вот новая версия скрипта.
Letos вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
Ovsyanicov (31.01.2023), wizardpnz (13.07.2018)
Старый 13.07.2018, 11:07   #199
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 196
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

то что нужно, я с этими матрицами упарился

почти всё работает
Вложения
Тип файла: zip цоколь.zip (9.2 Кб, 29 просмотров)
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 13.07.2018, 11:38   #200
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
почти всё работает
Поправил, прикладываю новый скрипт.
Letos вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
wizardpnz (13.07.2018), zorro (13.07.2018)
Ответ

Нижняя навигация
Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Базис-Мебельщик 10 systland Базис-мебельщик 10 1264 13.03.2024 22:48
БАЗИС-Мебельщик 7.0 Shadow Базис-мебельщик 7 2230 29.11.2019 10:37
Базис-мебельщик JavaScript ran Ищу работу 0 09.05.2014 10:08


Текущее время: 05:02. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
© 2007-2023 PROMEBEL

џндекс.Њетрика