Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 11 в этой теме.
Новшества Базис Мебельщик версии 11:
..... 6. Работоспособность скриптов, созданных в более ранних версиях, не гарантируется в версии БАЗИС 11.
.....
52. Разработана панель инструментов для скриптов, на которую можно вывести, например, часто используемые скрипты, со своими иконками, хинтами и т.д.
53. Добавлена возможность автозапуска выбранного скрипта на любое из двух событий – Загрузка модели, и/или Сохранение модели.
.....
Новшества Базис Мебельщик версии 2021:
16. Отладчик скриптов.
VISUAL CODE
Код:
Примеры скриптов из видео
Вес панелей.js
Выделить панели без облицовки.js
Панель по 3 точкам.js
Прифуговка кромки.js
Любые вопросы по любому системному и мебельному софту, любые конвертации, настройки и т.д.>сюда< (кроме озвученных в мануалах, инструкциях и темах форума) ...
Последний раз редактировалось AlexBolton; 09.01.2024 в 11:56..
А как выглядит полностью код, который не работает?
Я не разбираюсь в кодах и т.п.,спросил тут готовый скрипт,то что Вы мне советуете-не работает в качестве скрипта.
так что люди добрые.у кого есть скрипт для разрушения блоков,сборок,фрагментов в конкретно выделенном блоке -поделитесь,пожалуйста,им
Я не разбираюсь в кодах и т.п.,спросил тут готовый скрипт,то что Вы мне советуете-не работает в качестве скрипта.
так что люди добрые.у кого есть скрипт для разрушения блоков,сборок,фрагментов в конкретно выделенном блоке -поделитесь,пожалуйста,им
Целиком скрипт будет выглядеть так:
Код
PHP код:
/**
* Разрушить блок
* @param {List3D} block Блок для разрушения
* @param {boolean} recursive Флаг - разрушать ли вложенные блоки
*/
function DestroyBlock(block, recursive) {
// Если блок - Модель, то ничего не делаем, иначе посыпятся аксессы
if (block == Model)
return;
// Флаг, создан ли блок скриптом (находится во временной области модели)
var blockIsScript = block.IsOwner(Model.Temp);
Undo.Changing(block);
// список вложенных блоков. Используется если разрушение рекурсивное
var blocklist = [];
// Идём от последнего элемента к первому, т.к. при удалении объекта из блока,
// кол-во элементов внутри уменьшается.
for (var i = block.Count - 1; i >= 0; i--) {
var obj = block.Objects[i];
//Если не скриптовый блок, сохраняем изменения объекта в истории вручную
if (!blockIsScript) {
Undo.Changing(obj);
Undo.OwnerChanging(obj);
}
obj.ReTransform(obj.Owner, block.Owner);
obj.Owner = block.Owner;
if (obj.List){
blocklist.push(obj);
}
}
DeleteObject(block);
if (recursive) {
for (var i = 0; i < blocklist.length; i++) {
DestroyBlock(blocklist[i], true);
}
}
}
var block = Model.Selected.AsList();
for (var i = block.Count - 1; i >= 0; i--) {
var obj = block[i];
if (obj.List) {
DestroyBlock(obj, false);
}
}
[свернуть]
Скрипт разрушает блоки (и сборки и полуфабрикаты), находящиеся непосредственно в выделенном блоке. Если нужно, чтобы разрушались все блоки (вложенные во вложенные, вложенные во вложенные во вложенные и т.д.), тогда надо предпредпоследнюю строку
Подскажите пожалуйста.
Допустим замкнутый имеется контур построенный линиями.
этому контуру нужно построить еквидистанту во внутрь.
3 параметром функции я задаю false. все строится нормально, новый контур строится внутри исходного контура.
Меняю направление линий контура и повторяю попытку. Контур строится уже снаружи исходного контура. Т.е мне необходимо каким то образом определить действительно контур построился внутри или же все таки нужно 3 параметр функции поменять.
Набросал примерный код задуманного.
Код
PHP код:
var panel= Model.Selected.AsPanel; Undo.Changing(panel);
var Cut = panel.AddCut(NamePaz); //это наименование паза Traj = Cut.Trajectory;
if (!equin&&Traj2.IsInContour(Traj)||equin&&!Traj2.IsInContour(Traj) ) { //определяем направление эквидистанты если новый контур внутри создаем новый контур
Всё работало пока не понадобилось строить эквидистанту не к траекториям, а к контурам панели.
Т.е для формирования паза должен быть уже другой код
var Cut = panel.Cuts.Add();
Cut.CutType = 2; // тип паза. стандартный = 1
Cut.Thickness = panel.Thickness;
Traj = Cut.Contour;
а к этому контуру уже не получается применить функцию Traj2.IsInContour(Traj)
Вопрос. возможно ли определить направление эквидистанты без всех этих манипуляций или как проверить вложен ли контур в другой контур.
p/s обещал скинуть ролик работы скрипта: https://youtu.be/vooVjij8adM
Т.е мне необходимо каким то образом определить действительно контур построился внутри или же все таки нужно 3 параметр функции поменять.
Точно утверждать не могу, но проверил на паре примеров - работает.
при построении эквидистанты, третьим параметром можно поставить направление контура (против/по часовой стрелке):
при построении эквидистанты, третьим параметром можно поставить направление контура (против/по часовой стрелке):
Ага, спасибо. Помогло.
А почему ранее вы говорили что для вырезов лучше использовать редактирование контура, а не выборку? Какие подводные камни могут быть? Мне просто проще использовать именно выборку а не контур панели, т.к выборку можно найти по имени и удалить при следующем редактировании, а вот контур уже нет. если только новую панель строить.
Построил эквидистанту с 4 параметром=true, получился контур как на картинке. Что можно сделать что бы не было этих дуг на концах? Или как можно замкнуть контур?
Последний раз редактировалось rombler; 19.03.2020 в 13:51.
Ага, спасибо. Помогло.
А почему ранее вы говорили что для вырезов лучше использовать редактирование контура, а не выборку? Какие подводные камни могут быть? Мне просто проще использовать именно выборку а не контур панели, т.к выборку можно найти по имени и удалить при следующем редактировании, а вот контур уже нет. если только новую панель строить.
Построил эквидистанту с 4 параметром=true, получился контур как на картинке. Что можно сделать что бы не было этих дуг на концах? Или как можно замкнуть контур?
4 параметр отвечает за скругление, но его настроек вроде нет.
Построение контура панели отличается от построения паза тем, что паз делается сложнее: создаётся тело паза по параметрам и вычитается из панели. Операция вычитания сама по себе затратная и может сопровождаться ошибками.
В случае создания выреза пазом могут увеличиться время построения панели и размер файла по сравнению с внутренним контуром.
Для примера можете сделать в двух окнах по одной панели - в одном сделать вырез пазом, а в другом внутренним контуром и в каждом окне сделать (например) 200 копий, после чего нажать кнопку "Перестроить модель". Такое кол-во копий нужно чтобы визуально увидеть разницу во времени работы перестроения модели.
Ну пока ошибок вроде не наблюдалось. И работать с ним проще чем с контуром.
Вы ничего не сказали про то как замкнуть контур. Возможно ли это как то сделать?
Видимо когда контур сформирован из линий, даже если начало совпадает с концом контур все равно не замыкается.
Ну пока ошибок вроде не наблюдалось. И работать с ним проще чем с контуром.
Вы ничего не сказали про то как замкнуть контур. Возможно ли это как то сделать?
Видимо когда контур сформирован из линий, даже если начало совпадает с концом контур все равно не замыкается.
Можете приложить простенький пример скрипта, который делает незамкнутый контур?
Беглым поиском никакой встроенной функции по замыканию контура не нашёл.
Здравствуйте. Установил демо базис 11. Пытаюсь подключить к нему Visual Studio Code. Почти все сделал как описано тут https://github.com/BazisSoft/Scripts/wiki за исключением одного пункта 3. Добавьте новую конфигурацию. Для отладки скриптов в модуле Базис-Мебельщик выберите Базис. (не понял что именно и где выбирать)
В итоге получил ошибку. Можете подсказать как исправить или с демо версией да еще 11-ой это не реально?
Здравствуйте. Установил демо базис 11. Пытаюсь подключить к нему Visual Studio Code. Почти все сделал как описано тут https://github.com/BazisSoft/Scripts/wiki за исключением одного пункта 3. Добавьте новую конфигурацию. Для отладки скриптов в модуле Базис-Мебельщик выберите Базис. (не понял что именно и где выбирать)
В итоге получил ошибку. Можете подсказать как исправить или с демо версией да еще 11-ой это не реально?
Основная проблема в том, что инструкция и отладчик для БМ10, для 11 пока не завезли отладчик.