Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 11 в этой теме.
Новшества Базис Мебельщик версии 11:
..... 6. Работоспособность скриптов, созданных в более ранних версиях, не гарантируется в версии БАЗИС 11.
.....
52. Разработана панель инструментов для скриптов, на которую можно вывести, например, часто используемые скрипты, со своими иконками, хинтами и т.д.
53. Добавлена возможность автозапуска выбранного скрипта на любое из двух событий – Загрузка модели, и/или Сохранение модели.
.....
Новшества Базис Мебельщик версии 2021:
16. Отладчик скриптов.
Новшества Базис Мебельщик версии 2024:
5.«Использовать новый движок скриптов (в бета-тесте)» - Node.js v20.2.0
VISUAL CODE
Код:
Примеры скриптов из видео
Вес панелей.js
Выделить панели без облицовки.js
Панель по 3 точкам.js
Прифуговка кромки.js
Любые вопросы по любому системному и мебельному софту, любые конвертации, настройки и т.д.>сюда< (кроме озвученных в мануалах, инструкциях и темах форума) ...
Последний раз редактировалось AlexBolton; 02.05.2024 в 11:30..
Используя скрипты в 11 версии базиса в js code, выходили сообщения в консоль отладки. Перейдя на 10 версию эти сообщения пропали.
Подскажите пожалуйста как мне в 10 версии базиса сделать чтобы выходили сообщения в консоль отладки vs code?
Боюсь, не получится. console.log по-разному работает. Попробуйте в 10 и в 11 версии запустить следующий код:
PHP код:
alert(console.log)
У меня в 10 версии выдал функцию и её исходный код, который вызывает system.log.
А в 11 версии вывод уже function() {[native code]}, что говорит о том, что console.log в 11 версии не на js написан.
Ovsyanicov, подскажите где скачать обновление 10 базиса? перерыл весь сайт и не нашел.
Какой релиз нужен? После используемой Вами версии было ещё два релиза - октябрь и декабрь 2018. Если ТС на ключе была активна в декабре 2018, то могу скинуть Вам последний релиз 10-ки.
Вот такой скрипт переместит начало координат ЛСК выделенной панели в левый нижний угол относительно ГСК:
Код
PHP код:
var panel = Model.Selected.AsPanel;
if (panel){
Undo.Changing(panel);
// GabMin - Минимальная координата в ГСК по всем осям (левый нижний задний угол)
var corner = panel.ToObject(panel.GabMin);
panel.TranslateLCS({
x: corner.x,
y: corner.y,
z: 0
})
panel.Contour.Move(-corner.x, -corner.y);
panel.Build();
}
[свернуть]
Алгоритм перемещения простой (по содержанию):
1. Найти нужную точку в ГСК (в примере это GabMin)
2. Перевести её в ЛСК перемещаемой панели.
3. Панель переместить в нужную точку (z=0 для простоты, ибо для перемещения по оси Z надо ещё анализировать, в какую сторону смещать).
4. Сместить контур и пазы в обратном направлении (здесь смещается только контур для простоты и, судя по вашему описанию, пазы добавляются скриптом, значит панель, скорее всего , без пазов).
5. Перестроить панель
Спасибо, с панелями находящимися в одной плоскости я разобрался. А вот как теперь быть если панель повёрнута на 90 градусов. Можно ли как то определить положение(направление) панели? Или возможно ли рисовать траектории линий пазов не в глобальной ск а в лск каждой панели?
Спасибо, с панелями находящимися в одной плоскости я разобрался. А вот как теперь быть если панель повёрнута на 90 градусов. Можно ли как то определить положение(направление) панели? Или возможно ли рисовать траектории линий пазов не в глобальной ск а в лск каждой панели?
Пазы рисуются относительно ЛСК панели. Применительно к тому коду, что вы процитировали, чтобы сместить так же пазы, нужно их траекторию сместить на тот же вектор, на который смещается контур.
Пазы рисуются относительно ЛСК панели. Применительно к тому коду, что вы процитировали, чтобы сместить так же пазы, нужно их траекторию сместить на тот же вектор, на который смещается контур.
/** * Смещение траекторий пазов на заданный вектор * @param {Panel} panel * @param {Point} vec */ function MoveCuts(panel, vec){ for (var i = 0; i < panel.Cuts.Count; i++){ panel.Cuts.Cuts[i].Trajectory.Move(vec.x, vec.y); } }
var panel = Model.Selected.AsPanel; if (panel){ Undo.Changing(panel); // GabMin - Минимальная координата в ГСК по всем осям (левый нижний задний угол) var corner = panel.ToObject(panel.GabMin); panel.TranslateLCS({ x: corner.x, y: corner.y, z: 0 }) panel.Contour.Move(-corner.x, -corner.y); MoveCuts(panel, { x: -corner.x, y: -corner.y} ); panel.Build(); }
[свернуть]
Немного неправильный пример был. Но по нему я разобрался что нужно сделать. А неправильность вот в чем. Мы скриптом мы сначала перемещаем лск а потом перемещаем панель обратно. Далее строим паз и перемещаем его в положение где ранее стояла панель. А нужно перемещение контура поставить в условие, где делаем проверку
if (panel.GMin.x<0) { MoveCuts(panel, {x: panel.GMin.x, y: panel.GMin.y }); }
тогда мы переносим пазы тех панелей у которых левый нижний угол расположен на максимально удаленном расстоянии от ск.
Последний раз редактировалось rombler; 06.03.2020 в 15:13.
Подскажите как можно списком выбрать все трёхмерные объекты? Хочу сделать форму с кнопками. Нажимая кнопку что бы можно было пройти по всем панелям из мдф.
т.е. должно быть 2 кнопки. следующая панель и предыдущая панель.
Как перебрать все панели я представляю, но ведь у них нет никакого индекса, а мне нужно определить индекс именно нужной панели а потом найти индекс следующей.
Как перебрать все панели я представляю, но ведь у них нет никакого индекса, а мне нужно определить индекс именно нужной панели а потом найти индекс следующей.
Так Вы при переборе добавьте их в массив, а потом по индексу выделяйте (в массиве будут храниться ссылки на объекты).
Грубый пример:
PHP код:
let PanelsArr = []; Model.forEachPanel(function(pan){ PanelsArr.push(pan); }); let i = 0; let next = Action.Properties.NewButton('next'); next.OnClick = function(){ Model.UnSelectAll(); PanelsArr[i].Selected = true; i++; }; let prev = Action.Properties.NewButton('prev'); prev.OnClick = function(){ Model.UnSelectAll(); PanelsArr[i].Selected = true; i--; }