Показать сообщение отдельно
Старый 18.04.2024, 19:25   #982
АнтиВеталь
Новичок
 
Регистрация: 11.11.2017
Сообщений: 3
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
АнтиВеталь пока не определено
По умолчанию

Цитата:
Сообщение от Letos Посмотреть сообщение
Целиком скрипт будет выглядеть так:

Код

PHP код:
/**
 * Разрушить блок
 * @param {List3D} block Блок для разрушения
 * @param {boolean} recursive Флаг - разрушать ли вложенные блоки
 */
function DestroyBlock(blockrecursive) {
    
// Если блок - Модель, то ничего не делаем, иначе посыпятся аксессы
    
if (block == Model)
        return;
    
// Флаг, создан ли блок скриптом (находится во временной области модели)
    
var blockIsScript block.IsOwner(Model.Temp);
    
Undo.Changing(block);
    
// список вложенных блоков. Используется если разрушение рекурсивное
    
var blocklist = [];
    
// Идём от последнего элемента к первому, т.к. при удалении объекта из блока, 
    // кол-во элементов внутри уменьшается.
    
for (var block.Count 1>= 0i--) {
        var 
obj block.Objects[i];
        
//Если не скриптовый блок, сохраняем изменения объекта в истории вручную
        
if (!blockIsScript) {
            
Undo.Changing(obj);
            
Undo.OwnerChanging(obj);
        }
        
obj.ReTransform(obj.Ownerblock.Owner);
        
obj.Owner block.Owner;
        if (
obj.List){
            
blocklist.push(obj);
        }
    }
    
DeleteObject(block);
    if (
recursive) {
        for (var 
0blocklist.lengthi++) {
            
DestroyBlock(blocklist[i], true);
        }
    }
}


var 
block Model.Selected.AsList();
for (var 
block.Count 1>= 0i--) {
    var 
obj block[i];
    if (
obj.List) {
        
DestroyBlock(objfalse);
    }

[свернуть]


Скрипт разрушает блоки (и сборки и полуфабрикаты), находящиеся непосредственно в выделенном блоке. Если нужно, чтобы разрушались все блоки (вложенные во вложенные, вложенные во вложенные во вложенные и т.д.), тогда надо предпредпоследнюю строку
Код:
DestroyBlock(obj, false);
заменить на
Код:
DestroyBlock(obj, true);
По сути - заменить false на true
Добрый день. Можно сделать так чтобы этот скрипт разрушал только БЛОКИ, не затрагивая сборки, комплекты сборок и полуфабрикаты?
АнтиВеталь вне форума   Ответить с цитированием Вверх