Форум профессиональных мебельщиков 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..
Просмотров: 425352
Ответить с цитированием Вверх
Старый 06.02.2019, 11:38   #331
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от Ozimko Посмотреть сообщение
А по этому скрипту - нельзя ли сделать точку вставки фрагмента привязанной к положению курсора?
Можно в конце вашего скрипта добавить продолжение "экшена" и отслеживать перемещение курсора и клик, по которому завершать:
Код:
Action.Continue();
Action.Hint = 'Укажите положение объекта';
Action.OnMove = function () {
    obj.Position = Action.Pos3;
}
Action.OnClick = function (){
    obj.Position = Action.Pos3; // на всякий случай
    Action.OnMove = undefined;
    Action.Finish();
}
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Ozimko (06.02.2019)
Старый 06.02.2019, 12:19   #332
Ozimko
VIP
 
Аватар для Ozimko
 
Регистрация: 11.07.2008
Сообщений: 1,019
Сказал(а) спасибо: 261
Поблагодарили 314 раз(а) в 143 сообщениях
Вес репутации: 356
Ozimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючек
По умолчанию

Счастье есть. Сейчас все на горячие клавиши и жизнь удалась!

const filename = 'C:\\Bazis 10\\Фрагменты\\35\\11.fr3d';
pozY = NewNumberInput('высота полки');
SetCamera(p3dFront);
var Bok1 = GetPanel("Укажите 1-ую вертикальную панель");
var Bok2 = GetPanel("Укажите 2-ую вертикальную панель");
SetCamera(p3dTop);
var Back = GetEdge('Укажите заднюю границу', AxisX).First.z;
var Front = GetEdge('Укажите переднюю границу', AxisX).First.z;
SetCamera(p3dFront);

var x1 = Bok1.GabMax.x + 0;
var x2 = Bok2.GabMin.x - 0;
// Максимальная координата по высоте из двух минимальных координат панелей
var y1 = Math.max(Bok1.GabMin.y, Bok2.GabMin.y);
// Минимальная координата по высоте из двух максимальных координат панелей
var y2 = Math.min(Bok1.GabMax.y, Bok2.GabMax.y);
var z1 = Back;
var z2 = Front;
var frag = OpenFurniture(filename);
if (frag) {
var obj = frag.Make(0, 0);
if (obj) {
// размер по оси = максимум - минимум
obj.ElasticResize({
x: x2 - x1,
y: y2 - y1,
z: z2 - z1
});
obj.Owner = Model.Temp;
}
// минимальная координата идёт в координату позиции

}
Action.Continue();
Action.Hint = 'Укажите положение объекта';
Action.OnMove = function () {
obj.Position = Action.Pos3;
}
Action.OnClick = function (){
obj.Position = Action.Pos3; // на всякий случай
Action.OnMove = undefined;
Action.Finish();
SetCamera(p3dIsometric );
}
Ozimko вне форума   Ответить с цитированием Вверх
Старый 06.02.2019, 15:50   #333
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 241
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

Prop = Action.Properties;
Add = Prop.NewButton('Добавить');
Add.OnClick = function() {
n = Prop.NewNumber('Название', 300)
n.OnChange = function() {system.log(n.Value)}
};
Action.Continue();



По нажатию "Добавить" добавляются поля.

Как работать со значениями каждого отдельного созданного поля, а не только последнего?
У меня всегда только последнего созданного берёт значение.
Не через eval. (eval'ом умею.)

NewNumberы в какой-то массив записывать? Пробовал. Тож самое.
v22884 вне форума   Ответить с цитированием Вверх
Старый 06.02.2019, 16:23   #334
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от v22884 Посмотреть сообщение
Prop = Action.Properties;
Add = Prop.NewButton('Добавить');
Add.OnClick = function() {
n = Prop.NewNumber('Название', 300)
n.OnChange = function() {system.log(n.Value)}
};
Action.Continue();



По нажатию "Добавить" добавляются поля.

Как работать со значениями каждого отдельного созданного поля, а не только последнего?
У меня всегда только последнего созданного берёт значение.
Не через eval. (eval'ом умею.)

NewNumberы в какой-то массив записывать? Пробовал. Тож самое.

Первый вариант (всего лишь добавил "var")


Код:
Prop = Action.Properties;
Add = Prop.NewButton('Добавить');
Add.OnClick = function () {
    var n = Prop.NewNumber('Название', 300)
    n.OnChange = function () { system.log(n.Value) }
};
Action.Continue();
Почему оно работает, в отличие от исходного:
В исходном варианте переменная "n" находится в глобальном пространстве имён и каждый клик переписывает её значение, соответственно в лог будет писаться значение из последнего свойства, записанного в переменную "n"
В моём варианте переменная "n" создаётся в локальном пространстве имён и существует только во время выполнения обработчика OnClick, после чего доступа к этой переменной нет. В результате при каждом нажатии на кнопку создаётся новая переменная "n" на время обработки клика. Почему во время вызова лога берётся правильное значение "n" - сходу не вспомню, поэтому надёжность данного метода под вопросом (а может и всё в порядке и оно будет нормально работать долгие года). Второй вариант понятнее и прозрачнее.
[свернуть]

Второй вариант


При вызове обработчика первым аргументом идёт свойство, которое вызывает обработчик - этот вариант понадёжнее будет.
Код с минимумом вмешательств, но здесь каждому свойству в обработчике будет соответствовать отдельная функция:
Код:
Prop = Action.Properties;
Add = Prop.NewButton('Добавить');
Add.OnClick = function () {
    var n = Prop.NewNumber('Название', 300)
    n.OnChange = function (prop) { 
        system.log(prop.Value) 
    }
};
Action.Continue();
Код с вынесением обработчика в отдельную функцию - в отличие от кода выше, все обработчики свойств будут ссылаться лишь на одну, ранее созданную функцию:
Код:
Prop = Action.Properties;
Add = Prop.NewButton('Добавить');
function LogValue(prop){
    system.log(prop.Value);    
}
Add.OnClick = function () {
    var n = Prop.NewNumber('Название', 300)
    n.OnChange = LogValue;
};
Action.Continue();
[свернуть]
Letos вне форума   Ответить с цитированием Вверх
4 пользователя(ей) сказали cпасибо:
bbb i ko (06.02.2019), maxgmv (07.02.2019), Ovsyanicov (06.02.2019), v22884 (07.02.2019)
Старый 06.02.2019, 17:32   #335
Ozimko
VIP
 
Аватар для Ozimko
 
Регистрация: 11.07.2008
Сообщений: 1,019
Сказал(а) спасибо: 261
Поблагодарили 314 раз(а) в 143 сообщениях
Вес репутации: 356
Ozimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючек
По умолчанию

Блин, как всегда радость была недолгой.... профиля этим скриптом (установка эластичного фрагмента) не масштабируются.....
Ozimko вне форума   Ответить с цитированием Вверх
Старый 06.02.2019, 17:46   #336
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от Ozimko Посмотреть сообщение
Блин, как всегда радость была недолгой.... профиля этим скриптом (установка эластичного фрагмента) не масштабируются.....
А можно пример такого профиля?
Вроде Resize должен растянуть всё, что растягивается.
Letos вне форума   Ответить с цитированием Вверх
Старый 06.02.2019, 17:49   #337
Ozimko
VIP
 
Аватар для Ozimko
 
Регистрация: 11.07.2008
Сообщений: 1,019
Сказал(а) спасибо: 261
Поблагодарили 314 раз(а) в 143 сообщениях
Вес репутации: 356
Ozimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючек
По умолчанию

Вот. профиль для крепления к стене
Вложения
Тип файла: rar 28.rar (21.1 Кб, 33 просмотров)
Ozimko вне форума   Ответить с цитированием Вверх
Старый 07.02.2019, 10:46   #338
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от Ozimko Посмотреть сообщение
Вот. профиль для крепления к стене
Посмотрел. Оказывается профиль создаётся с нулевыми габаритами, наверное поэтому и не растягивается нормально. А при завершении скрипта профиль добавляется (как я понял) базового размера.
Написал замудрённое решение, а пока писал этот комментарий меня осенило и, оказывается, надо было просто после создания объекта сделать ему Build() . Новый код прилагаю.

Код


Код:
const filename = 'C:\\Bazis 10\\Фрагменты\\35\\11.fr3d'
pozY = NewNumberInput('высота полки');
SetCamera(p3dFront);
var Bok1 = GetPanel("Укажите 1-ую вертикальную панель");
var Bok2 = GetPanel("Укажите 2-ую вертикальную панель");
SetCamera(p3dTop);
var Back = GetEdge('Укажите заднюю границу', AxisX).First.z;
var Front = GetEdge('Укажите переднюю границу', AxisX).First.z;
SetCamera(p3dFront);

var x1 = Bok1.GabMax.x + 0;
var x2 = Bok2.GabMin.x - 0;
// Максимальная координата по высоте из двух минимальных координат панелей
var y1 = Math.max(Bok1.GabMin.y, Bok2.GabMin.y);
// Минимальная координата по высоте из двух максимальных координат панелей
var y2 = Math.min(Bok1.GabMax.y, Bok2.GabMax.y);
var z1 = Back;
var z2 = Front;
var frag = OpenFurniture(filename);
if (frag) {
    var obj = frag.Make(0, 0);
    obj.Build();
    if (obj) {
        // размер по оси = максимум - минимум
        obj.ElasticResize({
            x: x2 - x1,
            y: y2 - y1,
            z: z2 - z1
        });
        obj.Owner = Model.Temp;
    }
    // минимальная координата идёт в координату позиции

}
Action.Continue();
Action.Hint = 'Укажите положение объекта';
Action.OnMove = function () {
    obj.Position = Action.Pos3;
}
Action.OnClick = function () {
    obj.Position = Action.Pos3; // на всякий случай
    Action.OnMove = undefined;
    Action.Finish();
    SetCamera(p3dIsometric);
}
[свернуть]
Letos вне форума   Ответить с цитированием Вверх
4 пользователя(ей) сказали cпасибо:
De_mon (07.02.2019), maxgmv (07.02.2019), Ozimko (07.02.2019), rysla._ua (25.04.2023)
Старый 08.02.2019, 15:47   #339
IStiv
Пользователь
 
Регистрация: 02.12.2016
Сообщений: 84
Сказал(а) спасибо: 21
Поблагодарили 55 раз(а) в 27 сообщениях
Вес репутации: 109
IStiv скоро придёт к известности
По умолчанию

Всем доброго времени.
прошу совета помощи.
Задача состоит в определении где находится присадка под петли верх/низ/лево/право у панели. Скриптом.

Определить верх/низ решаемо, Y ось всегда вверх и получив координаты контура и приведя их к мировым - можно определить где верх, а где низ, и исходя из этого определить вверху или внизу присадка, вытащив координаты отверстий.
Ситуация еще осложнена тем что панель не одна(так бы можно было привязаться к какой то координате), а целая кухня панелей любой конфигурации.
Однако ситуация когда отверстия могут быть с двух сторон - исключена.

А вот с лево/право не понятно как быть.
Т.е. вопрос есть ли какой то способ , прогрммно определить лево/право панели ?
( лицом при этом будет задняя сторона панели , где отверстия).
Миниатюры
unnamed.jpg  
IStiv вне форума   Ответить с цитированием Вверх
Старый 10.02.2019, 08:39   #340
Ozimko
VIP
 
Аватар для Ozimko
 
Регистрация: 11.07.2008
Сообщений: 1,019
Сказал(а) спасибо: 261
Поблагодарили 314 раз(а) в 143 сообщениях
Вес репутации: 356
Ozimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючек
По умолчанию

Скрипт для установки вертикального эластичного блока. Рабочий, но почему-то долго упирался....
Вопрос - есть ли команда РАЗРУШИТЬ БЛОК? Создать вроде нашел, а разрушить нет....

const filename = 'C:\\Bazis 10\\Фрагменты\\35\\верт, закл\\перегородка под антресоль.fr3d'
SetCamera(p3dLeft);
var B1 = GetPoint("Укажите 1-ую точку");
var B2 = GetPoint("Укажите 2-ую точку");
SetCamera(p3dFront);

//SetCamera(p3dFront);

var x1 = B1.z + 0;
var x2 = B2.z - 0;

// Максимальная координата по высоте из двух минимальных координат панелей
var y1 = B1.y
// Минимальная координата по высоте из двух максимальных координат панелей
var y2 = B2.y
var z1 = B1.z;
var z2 = B2.z;
var frag = OpenFurniture(filename);
if (frag) {
var obj = frag.Make(0, 0);
obj.Build();
if (obj) {
// размер по оси = максимум - минимум
obj.ElasticResize({
x: x2 - x1,
y: y2 - y1,
z: z2 - z1
});
obj.Owner = Model.Temp;
}
// минимальная координата идёт в координату позиции

}
Action.Continue();
Action.Hint = 'Укажите положение объекта';
Action.OnMove = function () {
obj.Position = Action.Pos3;
}
Action.OnClick = function () {
obj.Position = Action.Pos3; // на всякий случай
Action.OnMove = undefined;
Action.Finish();
SetCamera(p3dIsometric);

Последний раз редактировалось Ozimko; 10.02.2019 в 11:07.
Ozimko вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
AndrianoS (09.01.2021)
Ответ

Нижняя навигация
Вернуться   Форум профессиональных мебельщиков 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


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


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

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