18.04.2024, 19:25
|
#982
|
Новичок
Регистрация: 11.11.2017
Сообщений: 3
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от Letos
Целиком скрипт будет выглядеть так:
Код
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);
}
}
[свернуть]
Скрипт разрушает блоки (и сборки и полуфабрикаты), находящиеся непосредственно в выделенном блоке. Если нужно, чтобы разрушались все блоки (вложенные во вложенные, вложенные во вложенные во вложенные и т.д.), тогда надо предпредпоследнюю строку
Код:
DestroyBlock(obj, false);
заменить на
Код:
DestroyBlock(obj, true);
По сути - заменить false на true
|
Добрый день. Можно сделать так чтобы этот скрипт разрушал только БЛОКИ, не затрагивая сборки, комплекты сборок и полуфабрикаты?
|
|
|