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

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

Меню

Маркет


Ответ
 
Опции темы Опции просмотра
Старый 25.12.2017, 23:12  
Обсуждение готовых скриптов
Letos
Консультант
Регистрация: 28.06.2017
Сообщений: 555

Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Версия для печати Отправить по электронной почте
Letos Letos вне форума 25.12.2017, 23:12
Рейтинг: ()

Здесь можно обсуждать скрипты из темы Готовые решения для БМ8-2021.

Обратите внимание на полезные ответы в этой теме!


Последний раз редактировалось Uncle; 04.07.2021 в 15:03..
Просмотров: 224828
Ответить с цитированием Вверх
Старый 29.04.2020, 14:25   #111
Alexnail
Пользователь
 
Регистрация: 31.01.2014
Адрес: г. Одесса
Сообщений: 58
Сказал(а) спасибо: 84
Поблагодарили 28 раз(а) в 17 сообщениях
Вес репутации: 135
Alexnail на пути к лучшему
По умолчанию

Добрый день.
Существует готовый скрипт облицовки видимых панелей:

Butt = Action.Properties.NewButt('Кромка');
Btn = Butt.NewButton('Накатать').OnClick = function() {
Model.forEachPanel(
function(Obj) {
if (Obj.Butts.Count === 1) {
for (var i = 0; i < Obj.Contour.Count; i++) {
if (Obj.IsButtVisible(i, 5)) {
StartEditing(Obj)
Obj.AddButt(Butt, i);
}
}
}
})
Action.Finish();
}
Action.Continue();

Если к примеру, присутствует ДВП, которое полностью закрывает торец детали, то такой торец считается невидимым, и при выполнении скрипта, кромка на него не наносится. Но, если ДВП накладывается не полностью, к примеру 1 мм торца виден, то эта панель уже считается видимой. Скажите, пожалуйста, что надо дописать в скрипте, чтобы можно было выбирать эти самые критерии , по которым бы определялось видимый торец или нет? Спасибо.
Alexnail на форуме   Ответить с цитированием Вверх
Старый 29.04.2020, 15:17   #112
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от Alexnail Посмотреть сообщение
Скажите, пожалуйста, что надо дописать в скрипте, чтобы можно было выбирать эти самые критерии , по которым бы определялось видимый торец или нет? Спасибо.
В вызове функции
Код:
Obj.IsButtVisible(i, 5)
нужно 5 поменять на нужно число. Этот параметр отвечает за максимальную дистанцию от кромки до объекта, при которой кромка считается закрытой.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Alexnail (30.04.2020)
Старый 30.04.2020, 10:19   #113
Alexnail
Пользователь
 
Регистрация: 31.01.2014
Адрес: г. Одесса
Сообщений: 58
Сказал(а) спасибо: 84
Поблагодарили 28 раз(а) в 17 сообщениях
Вес репутации: 135
Alexnail на пути к лучшему
По умолчанию

Цитата:
Сообщение от Letos Посмотреть сообщение
В вызове функции
Код:
Obj.IsButtVisible(i, 5)
нужно 5 поменять на нужно число. Этот параметр отвечает за максимальную дистанцию от кромки до объекта, при которой кромка считается закрытой.
Спасибо. Но немного не то. Указанная функция отвечает за то, на сколько удаленная от торца детали, деталь которая с ней соприкасается (т.е. за дистанцию от кромки до объекта, при которой кромка считается закрытой.) (Рис.1). А вот в моем вопросе немного по - другому. Как дать понять программе, что этот торец считается невидимым? (Рис.2)
Миниатюры
Рис.1.jpg   Рис.2.jpg  
Alexnail на форуме   Ответить с цитированием Вверх
Старый 30.04.2020, 15:42   #114
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от Alexnail Посмотреть сообщение
А вот в моем вопросе немного по - другому. Как дать понять программе, что этот торец считается невидимым?
Только вручную. Дополнил ваш код тремя функциями - проверка числа на нахождение в заданном отрезке значений, проверка закрыта ли кромка отдельной панелью и проверка, закрыта ли кромка вообще. Также изменил условие проверки кромок. Проверка примитивная - проверяются только элементы-линии и может некорректно работать, если панели расположены не ортогонально (т.е. не под углом 90°)

Новый код

PHP код:
function InRange(valueminmax) {
    
//Точность
    
const eps 0.1;
    return 
value min eps && value max eps;
}

/**
 * Проверка, накрывает ли панель определённую кромку другой панели
 * @param {number} elemindex Индекс элемента контура
 * @param {Panel} buttPanel Панель, которой принадлежит элемент
 * @param {Panel} checkPanel Панель, которая может накрывать кромку
 */
function IsButtClosedWithPanel(elemindexbuttPanelcheckPanel) {
    var 
checkMin buttPanel.ToObject(checkPanel.GabMin);
    var 
checkMax buttPanel.ToObject(checkPanel.GabMax);
    
// Проверяем, находится ли панель кромки на одном уровне с другой панелью.
    // То есть, находятся ли локальные мин/макс панели по оси Z (толщина) между 
    // граничными габаритами другой панели
    
if (InRange(buttPanel.LowZcheckMin.zcheckMax.z) && InRange(buttPanel.LowZcheckMin.zcheckMax.z)) {
        
// Элемент контура, индекс которого берётся из кромки
        
var elem buttPanel.Contour.Objects[elemindex];
        if (
elem.IsLine()) {
            var 
elemMin = {
                
xMath.min(elem.Pos1.xelem.Pos2.x),
                
yMath.min(elem.Pos1.yelem.Pos2.y)
            }
            var 
elemMax = {
                
xMath.max(elem.Pos1.xelem.Pos2.x),
                
yMath.max(elem.Pos1.yelem.Pos2.y)
            }
            
// Результат - находятся ли обе точки линии кромки в пределах габаритов панели
            
return InRange(elemMin.xcheckMin.xcheckMax.x) &&
                
InRange(elemMin.ycheckMin.ycheckMax.y) &&
                
InRange(elemMax.xcheckMin.xcheckMax.x) &&
                
InRange(elemMax.ycheckMin.ycheckMax.y)
        }
    }
    
// Если не вернули true раньше - значит результат false
    
return false;
}
/**
 * Проверка, накрывает ли кромка панели
 * @param {number} elemindex Индекс элемента контура
 * @param {Panel} buttPanel Панель, которой принадлежит элемент
 */
function IsButtClosed(elemindexbuttPanel) {
    var 
result false;
    
Model.forEachPanel(function (p){
        if (
IsButtClosedWithPanel(elemindexbuttPanelp))
            
result true;
    })
    return 
result;
}


Butt Action.Properties.NewButt('Кромка');
Btn Butt.NewButton('Накатать').OnClick = function () {
    
Model.forEachPanel(
        function (
Obj) {
            if (
Obj.Butts.Count === 1) {
                for (var 
0Obj.Contour.Counti++) {
                    if (
Obj.IsButtVisible(i5) && !IsButtClosed(iObj)) {
                        
StartEditing(Obj)
                        
Obj.AddButt(Butti);
                    }
                }
            }
        })
    
Action.Finish();
}
Action.Continue(); 
[свернуть]
Letos вне форума   Ответить с цитированием Вверх
Старый 30.04.2020, 17:56   #115
Alexnail
Пользователь
 
Регистрация: 31.01.2014
Адрес: г. Одесса
Сообщений: 58
Сказал(а) спасибо: 84
Поблагодарили 28 раз(а) в 17 сообщениях
Вес репутации: 135
Alexnail на пути к лучшему
По умолчанию

Я правильно понял, что надо Вашим кодом полностью заменить тот старый код, что был в файле скрипта?
Пока попробовал, но никаких действий вообще не происходит. Может я что-то не то делаю.
Alexnail на форуме   Ответить с цитированием Вверх
Старый 30.04.2020, 19:12   #116
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от Alexnail Посмотреть сообщение
Я правильно понял, что надо Вашим кодом полностью заменить тот старый код, что был в файле скрипта?
Пока попробовал, но никаких действий вообще не происходит. Может я что-то не то делаю.
может быть из-за этого условия:
Код:
if (Obj.Butts.Count === 1) {
Мне оно показалось странным - зачем накатывать кромки при условии, что в панели всего лишь одна кромка, но решил оставить, раз так было изначально (кто знает, какой изначальный замысел был). Попробуйте убрать это условие (если оно вам не нужно), и посмотрите, заработает ли.
Letos вне форума   Ответить с цитированием Вверх
Старый 05.05.2020, 12:03   #117
meg87
Новичок
 
Регистрация: 31.05.2018
Сообщений: 8
Сказал(а) спасибо: 4
Поблагодарили 3 раз(а) в 1 сообщении
Вес репутации: 0
meg87 пока не определено
По умолчанию

Цитата:
Сообщение от TProject Посмотреть сообщение
Есть аналогичный скрипт, который работает как в 8, так и в 10 версии, выделяет криволинейные детали и детали с пазами.
PHP код:
//// Выделение криволинейных деталей
Model.forEachPanel(function(obj) {
if (!
obj.IsContourRectangle)
obj.Selected true;
});

/// Выделение деталей с пазами

Model.forEachPanel(function(obj) {
if (
obj.Cuts.Count != 0)
obj.Selected true;
});

}); 
can i select the panel with hole?
I'm foreigner so sorry of using English here
meg87 вне форума   Ответить с цитированием Вверх
Старый 05.05.2020, 12:09   #118
Alexnail
Пользователь
 
Регистрация: 31.01.2014
Адрес: г. Одесса
Сообщений: 58
Сказал(а) спасибо: 84
Поблагодарили 28 раз(а) в 17 сообщениях
Вес репутации: 135
Alexnail на пути к лучшему
По умолчанию

К сожалению, не заработало. Если до удаления этой функции хотя-бы предлагалось накатать кромку, но ничего не происходило, то после удаления реакция на скрипт вообще ноль.
Alexnail на форуме   Ответить с цитированием Вверх
Старый 05.05.2020, 16:33   #119
АлКузнецов
Местный
 
Аватар для АлКузнецов
 
Регистрация: 15.04.2012
Адрес: Санкт-Петербург
Сообщений: 104
Сказал(а) спасибо: 56
Поблагодарили 276 раз(а) в 63 сообщениях
Вес репутации: 212
АлКузнецов как роза среди колючекАлКузнецов как роза среди колючекАлКузнецов как роза среди колючек
По умолчанию

Коллеги доброго дня
Обращаю особое внимание всех кто пишет скрипты для Б-Салона в Менеджере прайс листов.
Ни в коем случае не используйте функцию "forEach()" в выражениях типа
Код:
TovarItems.TovarModel.forEach(function(obj) {
/*инструкция функции*/
}
Функция будет без нареканий работать в МПЛ, но после экспорта в прайс-лист: уже в Салоне работать не будет.
К большому сожалению это выяснялось в самый неприятный момент. Нащупал баг опытным путем: почти случайно.

Выражаю свою огромную благодарность Letos за этот пост.
Цитата:
Сообщение от Letos Посмотреть сообщение
Попробуйте попользоваться таким вариантом:
Код:
function forEachInList(list, func){
    if (!func)
        return;
    for (var i = 0; i < list.Count; i++){
        var obj = list.Objects[i];
        func(obj);
        if (obj.List){
            forEachInList(obj.AsList(), func);
        }
    }
}


forEachInList(TovarItems.TovarModel, function(obj) {
/*инструкция функции*/
})
Если с этим скриптом всё будет нормально и моё предположение верно, то проблема в функции TovarItems.TovarModel.forEach.
Используйте функцию "forEachInList()". В Салоне всё работает.
__________________
С уважением Кузнецов Александр

Последний раз редактировалось АлКузнецов; 05.05.2020 в 17:32.
АлКузнецов вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Letos (06.05.2020)
Старый 05.05.2020, 18:16   #120
Meshok
Пользователь
 
Аватар для Meshok
 
Регистрация: 17.12.2016
Сообщений: 89
Сказал(а) спасибо: 27
Поблагодарили 50 раз(а) в 30 сообщениях
Вес репутации: 108
Meshok скоро придёт к известности
По умолчанию

Цитата:
Сообщение от meg87 Посмотреть сообщение
can i select the panel with hole?
I'm foreigner so sorry of using English here
Для панелей с круглым отверстием:

Model.forEachPanel(function(obj) {
if (obj.Contour.Count == 5)
obj.Selected = true;
});

Для панелей с вырезом любой формы:

Model.forEachPanel(function(obj) {
if (obj.Contour.Count != 4)
obj.Selected = true;
});

P.S. Только это при условии, что панели прямоугольные. Для панелей другой формы нужно будет играть со значением obj.Contour.Count.
С Уважением, Михаил.
Meshok вне форума   Ответить с цитированием Вверх
Ответ

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


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
"Мастер скриптов" — изменение скрипта блока в сцене KD ViPeS KitchenDraw (KD) 40 16.10.2023 19:23
KitchenDraw - библиотека готовых объектов kot100odessa KitchenDraw (KD) 514 04.10.2023 13:30
Шлифовка готовых изделий из акрилового камня Alexotto Обработка искусственного акрилового камня 402 28.07.2020 16:52
Витражи - фото готовых работ vasyl.vitrage Витражи 155 04.10.2016 12:43
Магазин готовых деталей из ЛДСП bar666 ПЕСОЧНИЦА) Раздел для новых участников форума 26 08.03.2015 21:32


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


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

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