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

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


Реклама на портале PROMEBELclub
шкаф-купе со скидкой по акции
Реклама на портале PROMEBELclub

искусственный камень Мебель196. Мебельный интернет-магазин в Екатеринбурге.
Ответ
 
Опции темы Опции просмотра
Старый 06.06.2017, 09:56  
БАЗИС 10 - Скрипты
systland
Модератор
Регистрация: 30.10.2007
Адрес: Москва
Сообщений: 561

Сказал(а) спасибо: 291
Поблагодарили 427 раз(а) в 179 сообщениях
Версия для печати Отправить по электронной почте
systland systland вне форума 06.06.2017, 09:56
Рейтинг: (3 голосов - 4.00 средняя оценка)

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


Последний раз редактировалось systland; 26.12.2017 в 11:52..
Просмотров: 49159
Ответить с цитированием Вверх
Старый 11.07.2018, 19:04   #191
wizardpnz
Пользователь
 
Регистрация: 02.07.2011
Сообщений: 91
Сказал(а) спасибо: 47
Поблагодарили 39 раз(а) в 16 сообщениях
Вес репутации: 107
wizardpnz на пути к лучшему
По умолчанию

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

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


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

Последний раз редактировалось wizardpnz; 12.07.2018 в 00:36.
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 12.07.2018, 12:28   #192
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 223
Сказал(а) спасибо: 45
Поблагодарили 397 раз(а) в 154 сообщениях
Вес репутации: 118
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, 12:48   #193
wizardpnz
Пользователь
 
Регистрация: 02.07.2011
Сообщений: 91
Сказал(а) спасибо: 47
Поблагодарили 39 раз(а) в 16 сообщениях
Вес репутации: 107
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, 13:30   #194
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 223
Сказал(а) спасибо: 45
Поблагодарили 397 раз(а) в 154 сообщениях
Вес репутации: 118
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, 13:56   #195
wizardpnz
Пользователь
 
Регистрация: 02.07.2011
Сообщений: 91
Сказал(а) спасибо: 47
Поблагодарили 39 раз(а) в 16 сообщениях
Вес репутации: 107
wizardpnz на пути к лучшему
По умолчанию

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

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

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

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

Последний раз редактировалось wizardpnz; 12.07.2018 в 17:50.
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 12.07.2018, 18:19   #196
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 223
Сказал(а) спасибо: 45
Поблагодарили 397 раз(а) в 154 сообщениях
Вес репутации: 118
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, 19:07   #197
wizardpnz
Пользователь
 
Регистрация: 02.07.2011
Сообщений: 91
Сказал(а) спасибо: 47
Поблагодарили 39 раз(а) в 16 сообщениях
Вес репутации: 107
wizardpnz на пути к лучшему
По умолчанию

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

не для всех случаев работает
Вложения
Тип файла: zip Модель1.zip (26.2 Кб, 4 просмотров)
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 13.07.2018, 11:25   #198
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 223
Сказал(а) спасибо: 45
Поблагодарили 397 раз(а) в 154 сообщениях
Вес репутации: 118
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

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

не для всех случаев работает
Хороший пример. Пришлось добавить нормализацию контура. Вот новая версия скрипта.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
wizardpnz (13.07.2018)
Старый 13.07.2018, 12:07   #199
wizardpnz
Пользователь
 
Регистрация: 02.07.2011
Сообщений: 91
Сказал(а) спасибо: 47
Поблагодарили 39 раз(а) в 16 сообщениях
Вес репутации: 107
wizardpnz на пути к лучшему
По умолчанию

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

почти всё работает
Вложения
Тип файла: zip цоколь.zip (9.2 Кб, 5 просмотров)
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 13.07.2018, 12:38   #200
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 223
Сказал(а) спасибо: 45
Поблагодарили 397 раз(а) в 154 сообщениях
Вес репутации: 118
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

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

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

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Базис-Мебельщик 10 systland Базис-мебельщик 10.0 672 08.11.2018 06:41
БАЗИС-Мебельщик 7.0 Shadow Базис-мебельщик 7.0 2228 12.09.2016 19:13
Базис-мебельщик JavaScript ran Ищу работу 0 09.05.2014 10:08


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


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
© 2007-2018 PROMEBEL